2013-05-13 43 views
0

我有一个任务,需要通过JSON Web服务接收的数据填充对象属性。属性名称映射到JSON密钥。我使用下面的代码,试图填充物,但是当它击中这条线的应用程序崩溃:使用反射动态设置属性时出现问题

 while(looper.hasNext()){ 
      String key = looper.next(); 
      String val = json.get(key).toString(); 
      user.getClass().getDeclaredField(key).set(user, val); // crash 
     } 

的对象称作用户。我已验证该键变量确实与用户对象中的属性匹配。有想法该怎么解决这个吗?谢谢!

+0

不知道如果你意识到GSON的你的领域。它做你想做的事情,它运作得非常好。我强烈建议检查一下。 – Krylez 2013-05-13 23:51:48

回答

2

您应该设置访问

Field field = user.getClass().getDeclaredField(key); 
if (field != null) { 
field.setAccessible(true); 
field.set(user, val); 
} 
+0

如果该字段是private/protected/package(即非public),则需要可访问的东西,但更可能的情况是getDeclaredField(key)返回null,因为该关键字不存在 - blackbelt的代码也会处理它,虽然! – Javawag 2013-05-13 21:07:45