Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用反射动态设置属性时出现问题_Java_Android_Reflection - Fatal编程技术网

Java 使用反射动态设置属性时出现问题

Java 使用反射动态设置属性时出现问题,java,android,reflection,Java,Android,Reflection,我有一个任务,需要从通过JSON web服务接收的数据中填充对象属性。属性名称映射到JSON键。我正在使用以下代码尝试填充对象,但应用程序在点击此行时崩溃: while(looper.hasNext()){ String key = looper.next(); String val = json.get(key).toString(); user.getClass().getDeclaredField(ke

我有一个任务,需要从通过JSON web服务接收的数据中填充对象属性。属性名称映射到JSON键。我正在使用以下代码尝试填充对象,但应用程序在点击此行时崩溃:

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

该对象称为用户。我已经验证了key变量是否与user对象中的属性匹配。有没有办法解决这个问题?谢谢

您应该将字段设置为可访问

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

如果字段是private/protected/package(即非public),则需要可访问的内容,但更可能的情况是getDeclaredField(key)返回null,因为密钥不存在-blackbelt的代码也会处理这个问题!不知道你是否知道Gson。它能做你想做的事情,而且效果非常好。我强烈建议你去看看。