如何迭代此JSON对象中的所有“listPages”?
{
"listPages": [
{
"title": "Accounts",
"recordType": "Company",
},
{
"title": "Contacts",
"recordType": "Person",
}
]
}
我正在尝试通过以下代码将列表项添加到listPages数组中每个项目的列表中:
JSONObject JSONConfig = envConfig.getEnvConfig(this);
try{
JSONArray listPages = JSONConfig.getJSONArray("listPages");
for(int i = 0 ; i < listPages.length() ; i++){
listItems.add(listPages.getJSONObject(i).getString("title"));
}
adapter.notifyDataSetChanged();
}catch(Exception e){
e.printStackTrace();
}
我可以在logcat中看到我收到系统错误:“java.lang.NullPointerException”在以下行中。
JSONArray listPages = JSONConfig.getJSONArray("listPages");
我尝试过阅读和调整其他问题的内容,但我无法弄明白。非常感谢帮助。
这是我的envConfig.java类
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import org.json.JSONObject;
import android.content.Context;
import android.util.Log;
public class EnvConfig {
private String rawJSONString;
private JSONObject jsonObjRecv;
public JSONObject getEnvConfig(Context context){
InputStream inputStream = context.getResources().openRawResource(
R.raw.envconfigg);
BufferedReader reader = new BufferedReader(new InputStreamReader(
inputStream));
StringBuilder sb = new StringBuilder();
String line = null;
try {
while ((line = reader.readLine()) != null) {
sb.append(line + "\n");
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
inputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
rawJSONString = sb.toString();
try {
JSONObject jsonObjRecv = new JSONObject(rawJSONString);
Log.i("Test", "<JSONObject>\n" + jsonObjRecv.toString()
+ "\n</JSONObject>");
} catch (Exception e) {
e.printStackTrace();
}
return jsonObjRecv;
}
}
答案 0 :(得分:1)
这是实例阴影的典型问题。您在方法块中使用 相同的 名称作为类变量在方法中声明一个新变量。因此,类变量是 shadowed ,因此永远不会初始化。当您稍后从方法返回它时,它为null。
public class EnvConfig {
private String rawJSONString;
private JSONObject jsonObjRecv; // <-- you declare a class variable here
// ...
try {
JSONObject jsonObjRecv = new JSONObject(rawJSONString); // <-- shadowed here!
除非你试图避免重复解析JSON,否则我建议完全删除类变量。否则,摆脱局部变量。
答案 1 :(得分:0)
以下是我用于解析我的JSON数据的代码,我不熟悉您正在使用的JSONConfig,但这对我来说非常有效。
JSONObject jsonObject = (JSONObject) new JSONTokener(/*Json String Data*/).nextValue();
JSONArray jsonArray = jsonObject.getJSONArray(/*Name of JSON Array*/);