I have stored Geofire coordinates in database and now I\'m trying to retrieve them using childEventListener() like this:
mDatab
mDatabase.child("geofire").child(key).child("l").addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
double latati = 0, longit = 0;
for (DataSnapshot child : dataSnapshot.getChildren()) {
// Log.e("!! All Data ::> ", child.getKey()+" "+child.getValue());
if (child.getKey().equalsIgnoreCase("0")) {
latati = Double.parseDouble(String.valueOf(child.getValue()));
}
if (child.getKey().equalsIgnoreCase("1")) {
longit = Double.parseDouble(String.valueOf(child.getValue()));
}
}
Log.e("!_@@__Lat Long ::", latati + " " + longit);
}
@Override
public void onCancelled(FirebaseError firebaseError) {
Log.e("!!__: ", "onCancelled ", firebaseError.toException());
}
});
If you use addChildEventListener, the DataSnapshot produced is from the child node of the referenced node. So in your case, your ref node is l, then inside onChildAdded, the dataSnapshot is :
key 0 with value 28.8...
key 1 with value 78.7...
So the onChidAdded() will be called twice.
You can modify your code based on that logic or use addValueEventListener instead. And if you use addValueEventListener, your code will be like this:
mDatabase.child("geofire").child(key).child("l").addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if (dataSnapshot.getValue() != null) {
Double d1 = (Double) dataSnapshot.child("0").getValue();
Double d2 = (Double) dataSnapshot.child("1").getValue();
venueLatString = String.valueOf(d1);
venueLngString = String.valueOf(d2);
} else {
Toast.makeText(getBaseContext(), "NULLL", Toast.LENGTH_SHORT).show();
}
}
...
});
Hope this helps
Can you please Try Following.
final HashMap<String, Object> taskMap = (HashMap<String, Object>) objectMap.getValue();
double lat = Double.parseDouble(taskMap.get("0"));
double lng = Double.parseDouble(taskMap.get("1"));