Rba*_*bar 2 java json object firebase firebase-realtime-database
我从 Firebase 检索了一个对象,并想使用我想要值的每个字段的名称来访问它的值。在 javascript 中,这就像myObject.name检索对象中的名称一样简单。
我如何在 Java 中做等效的事情?
mDatabase = FirebaseDatabase.getInstance().getReference();
user = FirebaseAuth.getInstance().getCurrentUser();
userId = user.getUid();
ValueEventListener myObjectListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
Log.i(TAG, "getting data");
Object myObject = dataSnapshot.getValue();
Log.v(TAG, myObject.toString());
// Outputs: {name= "john doe", hair="brown", isStudent=true, age=12}
// HERE is where I would like to get the name.
// DOES NOT work. Have also attempted things like
// myObject.getString("name"), etc.
myObject.getClass().getFieldName("name")
}
@Override
public void onCancelled(DatabaseError databaseError) {
Log.w(TAG, "loadPost:onCancelled", databaseError.toException());
}
};
mDatabase.child("users").child(userId).addValueEventListener(myObjectListener);
Run Code Online (Sandbox Code Playgroud)
尝试这个:
@SuppressWarnings("unchecked")
Map<String, Object> user = (Map<String, Object>) dataSnapshot.getValue();
String name = (String) user.get("name");
String hair = (String) user.get("hair");
long age = (Long) user.get("age");
...
Run Code Online (Sandbox Code Playgroud)
如果你有一个正确定义的 User类,那么这会更好:
User user = dataSnapshot.getValue(User.class);
String name = user.getName();
String hair = user.getHair();
...
Run Code Online (Sandbox Code Playgroud)
最后,还有第三种选择(使用DataSnapshot.child(String)方法):
String name = (String) dataSnapshot.child("name").getValue();
String hair = (String) dataSnapshot.child("hair").getValue();
...
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
22857 次 |
| 最近记录: |