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

新手上路,请多包涵

我从 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);

原文由 Rbar 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 382
2 个回答

尝试这个:

 @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");
...

如果 你有一个 正确定义User 类,那么这会更好:

 User user = dataSnapshot.getValue(User.class);
String name = user.getName();
String hair = user.getHair();
...

最后,还有第三种选择(使用 DataSnapshot.child(String) 方法):

 String name = (String) dataSnapshot.child("name").getValue();
String hair = (String) dataSnapshot.child("hair").getValue();
...

原文由 Paulo Mattos 发布,翻译遵循 CC BY-SA 3.0 许可协议

它对我有用 Mehul。

 String email = (String) ((LinkedHashMap) responseEntity.getBody().getPayload()).get("emailAddress");

原文由 Carlos 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题