Java通过键名从对象获取值

Java通过键名从对象获取值,java,json,object,firebase,firebase-realtime-database,Java,Json,Object,Firebase,Firebase Realtime Database,我已从Firebase检索到一个对象,并希望使用每个字段的名称访问该对象的值。在javascript中,这将是像myObject.name这样简单的东西来检索对象中的名称 如何在Java中实现等效功能 mDatabase=FirebaseDatabase.getInstance().getReference(); user=FirebaseAuth.getInstance().getCurrentUser(); userId=user.getUid(); ValueEventListener m

我已从Firebase检索到一个对象,并希望使用每个字段的名称访问该对象的值。在javascript中,这将是像
myObject.name
这样简单的东西来检索对象中的名称

如何在Java中实现等效功能

mDatabase=FirebaseDatabase.getInstance().getReference();
user=FirebaseAuth.getInstance().getCurrentUser();
userId=user.getUid();
ValueEventListener myObjectListener=新的ValueEventListener(){
@凌驾
公共void onDataChange(DataSnapshot DataSnapshot){
Log.i(标记“获取数据”);
对象myObject=dataSnapshot.getValue();
Log.v(标记,myObject.toString());
//输出:{name=“john doe”,hair=“brown”,isStudent=true,age=12}
//这是我想知道名字的地方。
//不起作用。也尝试过类似的事情
//myObject.getString(“名称”)等。
myObject.getClass().getFieldName(“名称”)
}
@凌驾
已取消的公共void(DatabaseError DatabaseError){
w(标记“loadPost:onCancelled”,databaseError.toException());
}
};
mDatabase.child(“用户”).child(userId).addValueEventListener(myObjectListener);
试试这个:

@SuppressWarnings(“未选中”)
Map user=(Map)dataSnapshot.getValue();
字符串名称=(字符串)user.get(“名称”);
String hair=(String)user.get(“hair”);
长年龄=(长)user.get(“年龄”);
...
如果您有一个
用户
类,那么这样做会更好:

User-User=dataSnapshot.getValue(User.class);
字符串名称=user.getName();
String hair=user.getHair();
...
最后,还有第三个选项(使用方法):

String name=(String)dataSnapshot.child(“name”).getValue();
String hair=(String)dataSnapshot.child(“hair”).getValue();
...
试试这个:

@SuppressWarnings(“未选中”)
Map user=(Map)dataSnapshot.getValue();
字符串名称=(字符串)user.get(“名称”);
String hair=(String)user.get(“hair”);
长年龄=(长)user.get(“年龄”);
...
如果您有一个
用户
类,那么这样做会更好:

User-User=dataSnapshot.getValue(User.class);
字符串名称=user.getName();
String hair=user.getHair();
...
最后,还有第三个选项(使用方法):

String name=(String)dataSnapshot.child(“name”).getValue();
String hair=(String)dataSnapshot.child(“hair”).getValue();
...
假设您得到了对象“o”,并且希望得到字段名“userName”的值

(String)((LinkedHashMap)o).get(“userName”)

假设您获取了对象“o”,并且希望获取字段名“userName”的值

(String)((LinkedHashMap)o.get(“用户名”)

它对我很有用,Mehul

String email = (String) ((LinkedHashMap) responseEntity.getBody().getPayload()).get("emailAddress");
它对我有用,梅胡尔

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

myObject.getName()
不工作?或者如果name是public
myObject.name
您是在问如何使用反射吗?我从未使用过Firebase。但是阅读javadoc会让事情变得非常简单:,
myObject.getName()
不起作用?或者如果name是public
myObject.name
您是在问如何使用反射吗?我从未使用过Firebase。但是阅读javadoc使这变得非常简单:,完美。谢谢你,保罗·马托斯。非常感谢。第一个选项非常有效,与第二个选项相比,在我的情况下是必要的,因为对象的属性可能不同(即,
头发
不存在),尽管一开始我没有想到提到这一点(我的缺点)。谢谢again@Rbar美好的很乐意帮忙;)一个建议的编辑是
String age=(String)user.get(“age”)
崩溃,因为我试图将其从long类型转换为字符串,但将其更改为
String.valueOf(user.get(“age”))
工作起来很有魅力,仍然适用于
getName
getHair
@Rbar……另一个解决方案是将typecast改为
Long
)完美的谢谢你,保罗·马托斯。非常感谢。第一个选项非常有效,与第二个选项相比,在我的情况下是必要的,因为对象的属性可能不同(即,
头发
不存在),尽管一开始我没有想到提到这一点(我的缺点)。谢谢again@Rbar美好的很乐意帮忙;)一个建议的编辑是
String age=(String)user.get(“age”)
崩溃,因为我试图将其从long类型转换为字符串,但将其更改为
String.valueOf(user.get(“age”))
工作起来很有魅力,仍然适用于
getName
getHair
@Rbar……另一个解决方案是将typecast改为
Long
)<代码>对象o没有方法
get()
<代码>找不到符号存在类型转换。LinkedHashMap有一个函数get(),如果密钥用户名存在,它将给出值。
Object o
没有方法
get()
<代码>找不到符号存在类型转换。LinkedHashMap有一个函数get(),如果密钥用户名存在,它将给出该值。