2016-05-19 5 views
0

Dieses ist, wie ich es aussehen soll, aber ich bin immer null Objektreferenz innerhalb von (DataSnapshot wayPointsChild : wayPointsSnapshotChild.getChildren()) {Firebase OnDataChange Methode auf null Objektverweis

Die beiden Eigenschaft stürzt alles

"timeStamp" : "2016/04/27 18:28:52", 
"travelType" : "work" 

JSON FROMAT

"waypoints" : { 
     "-KHB1VjqUdO90vxj9XCh" : { 

      "timeStamp" : "2016/04/27 18:28:52", 
      "travelType" : "work" 

      "-KHB1VjqUdO90vxj9XCi" : { 
      "latitude" : 58.337679, 
      "longitude" : 11.912757 
      }, 
      "-KHB1ZykbwgXM9sPNie9" : { 
      "latitude" : 58.281384, 
      "longitude" : 12.294495 
      }, 

     }, 
     "-KHpPe06hLpPttuGZ0rZ" : { 

      "timeStamp" : "2016/04/27 18:28:52", 
      "travelType" : "private" 

      "-KHpPe07pE5ZYn4JGiZ1" : { 
      "latitude" : 58.281384, 
      "longitude" : 12.294495 
      }, 
      "randomid1212" : { 
      "latitude" : 57.689903, 
      "longitude" : 11.989792 
      }, 
      "randomid1213" : { 
      "latitude" : 57.689905, 
      "longitude" : 11.989795 
      }, 

     } 

Der aktuelle OnDataChange() Methode

mUserRef.addValueEventListener(new ValueEventListener() { 
      //this keeps per-user list of points 
      List<MyWaypoint> userWayPointsList = new ArrayList<MyWaypoint>(); 

      @Override 
      public void onDataChange(DataSnapshot wayPointsDataSnapshot) { 
       if (wayPointsDataSnapshot.getChildrenCount() > 0) { 


        for (DataSnapshot wayPointsSnapshotChild : wayPointsDataSnapshot.getChildren()) { 
         Log.i("FireBaseTester", "For-Loop :: wayPointsSnapshotChild.getValue() : " + wayPointsSnapshotChild.getValue()); 
         if (wayPointsSnapshotChild.getChildrenCount() > 0) { 


          // Temporary list 
          List<String> latLngListTemp = new ArrayList<>(); 


          // THIS Gives me the error because it get used in the next for loop for some reason. 
          wayPointsSnapshotChild.child("timeStamp").getValue(); 


          for (DataSnapshot wayPointsChild : wayPointsSnapshotChild.getChildren()) { 

           //this is where we get the Lat and Lon 
           double latitude = Double.parseDouble(wayPointsChild.child("latitude").getValue().toString()); 
           double longitude = Double.parseDouble(wayPointsChild.child("longitude").getValue().toString()); 
           Log.i("FireBaseTester", "latitude = " + latitude + " , longitude = " + longitude); 

           latLngListTemp.add(latitude + ", " + longitude); 

          } 

          // List containing a nested List<List<String>> 
          latitudeNlongitude.add(latLngListTemp); 
         } 

        } 

       } 

       //here you can assign the points to the user 
       Log.i("FireBaseTester", "There are " + userWayPointsList.size() + " Points for User"); 
      } 

      @Override 
      public void onCancelled(FirebaseError firebaseError) { 
       Log.e("FireBaseTester", "onCancelled - wayPointRef Error is " + firebaseError.getMessage()); 
      } 
     }); 
    } else { 
     Log.i("FireBaseTester", "No WayPoints Data Received"); 
    } 

Logcat

Schwerwiegende Ausnahme: main Prozess: com.example.rasmusjosefsson.rjcar, PID: 25446 java.lang.NullPointerException: Versuch, die virtuelle Methode 'java.lang.String java.lang.Object.toString()' für ein Nullobjekt Referenz aufzurufen bei com.example.rasmusjosefsson.rjcar.demo.MapListActivityRealBack2 $ 1.onDataChange (MapListActivityRealBack2.java:122) bei com.firebase.client.core.ValueEventRegistration.fireEvent (ValueEventRegistration.java:56) bei com.firebase. client.core.view.DataEvent.fire (DataEvent.java:45) unter com.firebase.client.core.view.EventRaiser $ 1.run (EventRaiser.java:38) bei android.os.Handler.handleCallback (Handler.java:739) bei android.os.Handler.dispatchMessage (Handler.java:95) bei android.os.Looper.loop (Looper.java:148) bei android.app.Activi tyThread.main (ActivityThread.java:5417) bei java.lang.reflect.Method.invoke (Mutter Methode) bei com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:726) bei com.android.internal.os.ZygoteInit.main (ZygoteInit.java:616)

Antwort

1

Diese Zeilen zeigen das Problem:

wayPointsSnapshotChild.child("timeStamp").getValue(); 
for (DataSnapshot wayPointsChild : wayPointsSnapshotChild.getChildren()) { 
{ 
    double latitude = Double.parseDouble(wayPointsChild.child("latitude").getValue().toString()); 

Aufruf getChildren auf wayPointSnapshotChild kehrt die timestamp Wert als einer der Kinder, die keine a Kind genannt latitude.

Sie könnten Ihre Daten wie folgt strukturiert:

"waypoints" : { 
    "-KHB1VjqUdO90vxj9XCh" : { 

     "timeStamp" : "2016/04/27 18:28:52", 
     "travelType" : "work" 
     "points": { 
      "-KHB1VjqUdO90vxj9XCi" : { 
      "latitude" : 58.337679, 
      "longitude" : 11.912757 
      }, 
      "-KHB1ZykbwgXM9sPNie9" : { 
      "latitude" : 58.281384, 
      "longitude" : 12.294495 
      } 
     } 
    } 

Dann in Ihrer for Schleife nennen:

wayPointsSnapshotChild.child("points").getChildren() 

Dann wird die innere Schleife nur wayPointChild Objekte, die Breiten- und Längengrade enthalten Eigenschaften erhalten würde.

+0

Danke Kumpel! Klappt wunderbar –

Verwandte Themen