Java通过键名从对象中获取值

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)

Pau*_*tos 5

尝试这个:

@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)