-1

我已经设置JsonArrayJsonObjectApplication 类以使这些对象成为全局对象。在设备重新启动之前检索存储在 json 数组中的值。重启后 json 数组显示空白 squre '[]' 括号。没有重新启动它向我显示了 json 数组的值。但重启后就不行了。任何建议或指导,以便我可以做到这一点。

这是Application

public class MyApplicationClass extends Application{
public static final String PREFS_NAME = "PrefsFile";
private JSONArray jsonArray=new JSONArray();
private jsonObject jsonObj=new jsonObject();

public JSONArray getjsonArray() {
    return jsonArray;
}

public void setjsonArray(JSONArray jsonArray) {
    this.jsonArray = jsonArray;
}

public jsonObject getjsonObj() {
    return jsonObj;
}

public void setjjsonObj(jsonObject jsonObj) {
    this.jsonObj = jsonObj;
}

}

在这里我设置 JsonArray & JsonObject

// jsonObj, jsonArray declare as class variables 
                       //getting global JsonArray object

               final MyApplicationClass AppObj=(MyApplicationClass )getApplicationContext();
               final JSONArray jsonArray=AppObj.getJsonAlarmArray();

              // getting name of sharedPreferences file & mode
              sharedPrefs=getSharedPreferences(MyApplicationClass.PREFS_NAME, Context.MODE_PRIVATE);
              final JSONObject jsonObj =AppObj.getJsonObj();

                 btn.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View arg0) {
            // TODO Auto-generated method stub
            if(some condition)
                {
                    jsonObj.put("value1", 1234);
                    jsonObj.put("value2", 234);
                    jsonObj.put("value3", 3);

                }
                else if(some condition))
                {
                    jsonObj.put("value1", 12314);
                    jsonObj.put("value2", 2314);
                    jsonObj.put("value3", 31);
                }

                jsonArray.put(jsonObj);
                AppObj.setJsonAlarmArray(jsonArray);
            editor= sharedPrefs.edit();
                editor.putString("key", jsonArray.toString());
                System.out.println(jsonArray.toString());
                editor.commit();
        }
    });

这样我正在检索 json 数组

btn2.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View arg0) {
            // TODO Auto-generated method stub


            sharedPrefs=getSharedPreferences(MyApplicationClass.PREFS_NAME, 0);

            try {

                JSONArray jsonArray=((MyApplicationClass)getApplication()).getJsonAlarmArray();
                System.out.println(jsonArray.toString());
                Toast.makeText(TypesActivity.this, ""+jsonArray, Toast.LENGTH_LONG).show();

            } catch (Exception e) {
                e.printStackTrace();
            }


        }
    });
4

2 回答 2

1

您忘记从以下位置读取 json SharedPreferences

btn2.setOnClickListener(new OnClickListener() {

    @Override
    public void onClick(View arg0) {
        // TODO Auto-generated method stub


        sharedPrefs=getSharedPreferences(MyApplicationClass.PREFS_NAME, 0);
        String jsonArrayString = sharedPrefs.getString("key", null);
        try {
            if (jsonArrayString != null) {
                JSONArray jsonArray= new JSONArray(jsonArrayString) 
                System.out.println(jsonArray.toString());
                Toast.makeText(TypesActivity.this, ""+jsonArray, Toast.LENGTH_LONG).show();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }


    }
});
于 2013-05-10T10:30:37.670 回答
0

将您的 Json 字符串保存在文件中,并在每次更新 Json 对象时更新文件。再次加载Json时,可以从文件中加载

于 2013-05-10T10:30:30.770 回答