Java 将JSON存储到SharedReference

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();

我正在Android中实现JSON解析。应用程序连接到url以检索JSON并返回字符串,一切正常。现在我想将JSON字符串存储到ShareReferences,这样用户在没有internet连接的情况下仍然可以看到ListView。这是我的密码

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) {
  ...
}