2017-08-03 15 views
0

私はこの構造をFirebaseに持っています。私は、各キーの内側にあるすべての緯度と経度を取得し、マーカーとしてマーカーを追加する必要があります。私は以下のコードで行ったが、nullオブジェクト参照エラーを返す。なにが問題ですか?Firebaseからすべての子を取得し、マップ上にブックマークとして追加する方法

DatabaseReference ref = FirebaseDatabase.getInstance().getReference(); 

ref.child("uploads").addValueEventListener(new ValueEventListener() { 
    @Override 
    public void onDataChange(DataSnapshot dataSnapshot) { 
     if (dataSnapshot.exists()) { 
     for (DataSnapshot postSnapshot : dataSnapshot.getChildren()){ 
     double latitude = postSnapshot.child("latitude").getValue(Double.class); 
     double longitude = postSnapshot.child("longitude").getValue(Double.class); 
     LatLng local = new LatLng(latitude, longitude); 
     mMap.addMarker(new MarkerOptions().position(local).title("New Marker")); 
     mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(local, 18)); 
} 

firebase database

LogCat

08-03 19:57:01.204 27287-27287/com.chico.uploadimage E/UncaughtException: java.lang.NullPointerException: Attempt to invoke virtual method 'double java.lang.Double.doubleValue()' on a null object reference 
                       at com.chico.uploadimage.ShowMap$1.onDataChange(ShowMap.java:89) 
                       at com.google.android.gms.internal.zzbpx.zza(Unknown Source) 
                       at com.google.android.gms.internal.zzbqx.zzZS(Unknown Source) 
                       at com.google.android.gms.internal.zzbra$1.run(Unknown Source) 
                       at android.os.Handler.handleCallback(Handler.java:739) 
                       at android.os.Handler.dispatchMessage(Handler.java:95) 
                       at android.os.Looper.loop(Looper.java:158) 
                       at android.app.ActivityThread.main(ActivityThread.java:7230) 
                       at java.lang.reflect.Method.invoke(Native Method) 
                       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230) 
                       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120) 
08-03 19:57:01.444 27287-27287/com.chico.uploadimage E/AndroidRuntime: FATAL EXCEPTION: main 
                     Process: com.chico.uploadimage, PID: 27287 
                     java.lang.NullPointerException: Attempt to invoke virtual method 'double java.lang.Double.doubleValue()' on a null object reference 
                      at com.chico.uploadimage.ShowMap$1.onDataChange(ShowMap.java:89) 
                      at com.google.android.gms.internal.zzbpx.zza(Unknown Source) 
                      at com.google.android.gms.internal.zzbqx.zzZS(Unknown Source) 
                      at com.google.android.gms.internal.zzbra$1.run(Unknown Source) 
                      at android.os.Handler.handleCallback(Handler.java:739) 
                      at android.os.Handler.dispatchMessage(Handler.java:95) 
                      at android.os.Looper.loop(Looper.java:158) 
                      at android.app.ActivityThread.main(ActivityThread.java:7230) 
                      at java.lang.reflect.Method.invoke(Native Method) 
                      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230) 
                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120) 
+0

あなたはすべてのチルドを手に入れましたか? –

+0

harish、いいえ、アプリケーションが終了し、nullオブジェクト参照エラーが発生すると、リンク内にfirebase構造が見えていますか? – FranciscoM

+0

スタックダンプを送信します。あなたは 'mMap'がヌルではないと確信していますか? –

答えて

0

イテレータを使用してデータを取得します。それは私のために働いた。

Iterator<DataSnapshot> dataSnapshotsChat = dataSnapshot.getChildren().iterator(); 

    while (dataSnapshotsChat.hasNext()) { 
     DataSnapshot dataSnapshotChild = dataSnapshotsChat.next(); 
     double latitude = postSnapshot.child("latitude").getValue(Double.class); 
     double longitude = postSnapshot.child("longitude").getValue(Double.class); 
     LatLng local = new LatLng(latitude, longitude);    
} 
+0

それは働いた!ありがとうございました。 – FranciscoM

0

あなたは参照してくださいましたか? https://firebase.google.com/docs/database/android/read-and-write

これを試してください。それはあなたを助けるでしょう。

DatabaseReference database = FirebaseDatabase.getInstance().getReference(); 
DatabaseReference ref = database.child("contacts"); 

Query phoneQuery = ref.orderByChild(phoneNo).equalTo("+918058641661"); 
phoneQuery.addListenerForSingleValueEvent(new ValueEventListener() { 
@Override 
public void onDataChange(DataSnapshot dataSnapshot) { 
    for(DataSnapshot singleSnapshot : dataSnapshot.getChildren()){ 
     user = singleSnapshot.getValue(User.class); 
    } 
} 
@Override 
    public void onCancelled(DatabaseError databaseError) { 
     Log.e(TAG, "onCancelled", databaseError.toException()); 
    } 
}); 

私はこれに続きました。

関連する問題