How to retrieve 'double' values saved under one key in Firebase?

前端 未结 3 1732
灰色年华
灰色年华 2021-01-17 06:21

I have stored Geofire coordinates in database and now I\'m trying to retrieve them using childEventListener() like this:

    mDatab         


        
相关标签:
3条回答
  • 2021-01-17 06:58
    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());
                }
            });
    
    0 讨论(0)
  • 2021-01-17 07:04

    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

    0 讨论(0)
  • 2021-01-17 07:04

    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"));
    
    0 讨论(0)
提交回复
热议问题