2016-09-15 56 views
-1

enter image description here当孩子从表嵌套时如何获取firebase中的数据

上图是我在firebase中的数据库结构。我不知道如何获取儿童内部的数据Latlng。我将如何获取它?

+0

https://firebase.google.com/docs/database/android/retrieve-data –

+0

为什么你会评价我!如果你知道这个问题,那就回答我吧。不要投下来! – tin

回答

0

在你的项目,你需要有代表“驱动程序”实体POJO。喜欢的东西:

public class Driver { 

    private String age; 
    private String busNum; 
    // etc ... 

    private HashMap<String, Object> Latlng; 

    public Driver() { 
    } 

    // getters ... 

    public HashMap<String, Object> getLatlng() { 
     return Latlng; 
    } 

} 

Firebase,内部对象必须声明具有HashMaps<String, Object>,其中String是关键和Object可以在你的模型中的任何其他对象(在你的情况下,Float我敢打赌) 。现在

,如果你想读一些价值只有一次,只需调用addListenerForSingleValueEvent方法,像这样:

FirebaseDatabase.getInstance() 
       .getReferenceFromUrl(URL_DRIVERS) 
       .child(driverKey) 
       .addListenerForSingleValueEvent(new ValueEventListener() { 
        @Override 
        public void onDataChange(DataSnapshot dataSnapshot) { 
         Driver driver = dataSnapshot.getValue(Driver.class); 

         // And here you can access Latlng object 
         latitude = driver.getLatlng().get("latitude"); 
         longitude = driver.getLatlng().get("longitude"); 
        } 

        @Override 
        public void onCancelled(DatabaseError databaseError) { 
         // handle error ... 
        } 
       }); 

注:URL_DRIVERS将是您的根节点URL(https://your-project.firebaseio.com/)加上你的驱动程序节点位置(你的情况“驱动程序”)

0

如果你只是想知道如何得到这些值一次,那么它是这样的:

String lat; 
String lon; 

String userId = // [get userID from firebase] 

String mDatabase = // [get database ref from firebase] 


mDatabase.child("Driver").child(userId).child("Latlng").addListenerForSingleValueEvent(
    new ValueEventListener() { 
     @Override 
     public void onDataChange(DataSnapshot dataSnapshot) { 

      lat = dataSnapshot.child("latitude").getValue(); 
      lon = dataSnapshot.child("longitude").getValue(); 

      // ... 
     } 

     @Override 
     public void onCancelled(DatabaseError databaseError) { 
      Log.w(TAG, "getUser:onCancelled", databaseError.toException()); 
      // ... 
     } 
    }); 
+0

如果您想要实时跟踪动作,那是不同的,但答案仍然在我之前提供的链接中提供。 –

+0

您的意思是“纬度”和“经度”(字符串),而不是简单的经度和纬度? – josemigallas

+0

@josemigallas这是简单的经纬度 – tin

0

我可以从你共享你是在驱动节点推值数据的屏幕快照了解,所以如果我猜测的权利,它不是用户ID,你可以获取并传入代码(如其他答案中所述)。

在这种情况下,你必须得到驱动节点

1)干燥机创建实体的POJO的快照,Driver.class

public class Driver { 

private String age; 
private String busNum; 
// etc ... 

private HashMap<String, Object> Latlng; 

public Driver() { 
} 

// add all getters and setters... 

public HashMap<String, Object> getLatlng() { 
    return Latlng; 
}} 

在您的活动类

DatabaseReference mDatabaseReference = FirebaseDatabase.getInstance().getReference().child("Driver"); 
    mDatabaseReference.addValueEventListener(new ValueEventListener() { 

     @Override 
     public void onDataChange(DataSnapshot dataSnapshot) { 

      System.out.println("There are total" + dataSnapshot.getChildrenCount() + " values"); 
      for (DataSnapshot driverSnapshot: dataSnapshot.getChildren()) { 
       SampleContent content= driverSnapshot.getValue(Driver.class); 

       System.out.println(content.getLatlng().toString()); 

      } 
     } 

     @Override 
     public void onCancelled(DatabaseError databaseError) { 

     } 
    }); 

注:我没有运行的代码可能有语法错误,请原谅我。

另请参阅https://firebase.google.com/docs/database/android/retrieve-data了解更多详情。