Java 将JSON存储到SharedReference
我正在Android中实现JSON解析。应用程序连接到url以检索JSON并返回字符串,一切正常。现在我想将JSON字符串存储到ShareReferences,这样用户在没有internet连接的情况下仍然可以看到ListView。这是我的密码Java 将JSON存储到SharedReference,java,android,json,Java,Android,Json,我正在Android中实现JSON解析。应用程序连接到url以检索JSON并返回字符串,一切正常。现在我想将JSON字符串存储到ShareReferences,这样用户在没有internet连接的情况下仍然可以看到ListView。这是我的密码 if (isInternetPresent) { //check internet connection ServiceHandler sh = new ServiceHandler();
if (isInternetPresent) { //check internet connection
ServiceHandler sh = new ServiceHandler();
listDataHeader = new ArrayList<String>();
listDataChild = new HashMap<String, List<TVSchedModel>>();
// Making a request to url and getting response
jsonStr = sh.makeServiceCall(URL, ServiceHandler.GET); //connect to url and return a string
Editor editor = sharedpreferences.edit();
editor.putString("JSON", jsonStr);
editor.commit();
} else {
getActivity().runOnUiThread(new Runnable() {
public void run() {
Toast.makeText(getActivity(),
"Cannot connect to server", Toast.LENGTH_SHORT)
.show();
}
});
jsonStr = sharedpreferences.getString("JSON", "");
Log.i("JSON Shared", jsonStr);
}
try {
JSONObject jsonObj = new JSONObject(jsonStr);
// Getting JSON Array node
JSONArray chan = jsonObj.getJSONArray(TAG_CHANNEL);
for (int i = 0; i < chan.length(); i++) {
listDataHeader.add(chan.getJSONObject(i).getString(
"Channel"));
JSONArray sched = jsonObj.getJSONArray(chan
.getJSONObject(i).getString("Channel"));
List<TVSchedModel> result = new ArrayList<TVSchedModel>();
for (int k = 0; k < sched.length(); k++) {
result.add(convertSchedList(sched.getJSONObject(k)));
}
listDataChild.put(listDataHeader.get(i), result);
}
listAdapter.setHeaderList(listDataHeader);
return listDataChild;
} catch (Throwable t) {
t.printStackTrace();
}
我做错了什么?
谢谢错误来自这一行:
listDataHeader.add(chan.getJSONObject(i).getString("Channel"));
我敢打赌,listDataHeader
在未检测到连接时为空,这是因为您正在初始化此块中的此对象:
if (isInternetPresent) {
...
}
只需在该块外部(上面)初始化它,即使在没有连接的情况下也可以访问它。TVSchedFragment.java文件的187行是什么?它是listDataHeader.add(chan.getJSONObject(i.getString(“通道”);但是我认为错误来自于JSONObject jsonObj=newjsonobject(jsonStr);因为它在我上网时有效,但在我离线并从SharePreferenceSweel获取字符串时无效,有时一个小错误需要花费大量的时间。非常感谢你
if (isInternetPresent) {
...
}