如何保存一个JSON数组到共享preferences,并在不同的活动再次读取。 Android版 [英] How to save a JSON array into SharedPreferences and read again in a different activity. Android

查看:130
本文介绍了如何保存一个JSON数组到共享preferences,并在不同的活动再次读取。 Android版的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我要我的JSON数组后保存到共享preferences和访问它在不同的活动。

在这里的例子我的的Json

 阵列

    [现状] =>成功
    [原因] =>成功
    [版] => 1
    [总] =>排列
        (
            [category_1] => 3
            [category_2] => 3
            [category_3] => 3
        )    [标题] =>排列
        (
            [category_1] =>食品
            [category_2] =>喝
            [category_3] =>甜点
        )    [数据] =>排列
        (
            [category_1] =>排列
                (
                    [0] =>排列
                        (
                            [CONTENT_ID] => 123456
                            [名] =>名1
                            [标题] =>这是标题中存在一个
                            [说明] =>这是标题描述
                            [经验] => HTTP://image.jpg                        )                    [1] =>排列
                        (...                )            [category_2] =>排列
                (
                    [0] =>排列
                        (
                            [CONTENT_ID] => 123456
                            [名] =>名1
                            [标题] =>这是标题中存在一个
                            [说明] =>这是标题描述
                            [经验] => HTTP://image.jpg
                        )                    [1] =>排列
                        (...                )            [category_3] =>排列
                (
                    [0] =>排列
                        (
                            [CONTENT_ID] => 123456
                            [名] =>名1
                            [标题] =>这是标题中存在一个
                            [说明] =>这是标题描述
                            [经验] => HTTP://image.jpg
                        )                    [1] =>排列
                       (...
                )
        )

MainActivity:

  ...
尝试{                        JSONObject的jObject =新的JSONObject(结果);
                        字符串状态= jObject.getString(状态);                        如果(status.equals(成功)){
                            // Log.e(身份,地位);                            JSONObject的jObject_data =新的JSONObject(jObject.getString(数据));
                            JSONArray jArray_data_category_1 =新JSONArray(jObject_data.getString(category_1));
                            JSONArray jArray_data_category_2 =新JSONArray(jObject_data.getString(category_2));
                            // JSONArray jArray_data_category_3 =新JSONArray(jObject_data.getString(category_3));                            //Log.e(\"category_1 ********* ,jArray_data_category_1.toString());
                            vc.insertCategory_1 preF(jArray_data_category_1.toString());

这是我的共享prefInput.java:

  ...
公共类共享$ P $ {pfInput    公共静态最后弦乐CATEGORY_1 =CATEGORY_1;
    公共静态最后弦乐CATEGORY_2 =CATEGORY_2;
    公共静态最后弦乐CATEGORY_3 =CATEGORY_3;...

下面就是 VarController

  ...
// category_1
        公共无效insertCategory_1 preF(String s)将{
            prefSetting = context.getShared preferences(共享prefInput.DEVICE_SETTING,Context.MODE_PRIVATE);
            prefSettingEditor = prefSetting.edit();
            prefSettingEditor.putString(共享prefInput.CATEGORY_1,S);
            prefSettingEditor.commit();
        }        公共字符串readCategory_1 preF(){
            prefSetting = context.getShared preferences(共享prefInput.DEVICE_SETTING,Context.MODE_PRIVATE);
            返回prefSetting.getString(共享prefInput.CATEGORY_1,00);
        }
...

而这里是我试图访问它。但它不工作。

  {尝试
                                    JSONArray jsonArray2 =新JSONArray(sharedCategory_1 pref.getString(CATEGORY_1,状态));
                                    的for(int i = 0; I< jsonArray2.length();我++){
                                         Log.d(你的JSON阵列,jsonArray2.getInt(我)+);                                         Log.e(里尝试,内部试);
                                    }
                                }赶上(例外五){
                                    e.printStackTrace();
                                    Log.e(内部异常,内部异常);
                                }

这是在登录当我尝试读取共享preF:

  9月8日至12日:22:34.757:W / System.err的(871):在org.json.JSON.typeMismatch(JSON.java:96)
9月8日至12日:22:34.787:W / System.err的(871):在org.json.JSONArray.getInt(JSONArray.java:357)
9月8日至12日:22:34.787:W / System.err的(871):在com.example.brazilapps.MainActivity $ 1.onPostExecute(MainActivity.java:158)
9月8日至12日:22:34.787:W / System.err的(871):在com.example.brazilapps.MainActivity $ 1.onPostExecute(MainActivity.java:1)
9月8日至12日:22:34.787:W / System.err的(871):在android.os.AsyncTask.finish(AsyncTask.java:417)
9月8日至12日:22:34.797:W / System.err的(871):在android.os.AsyncTask.access $ 300(AsyncTask.java:127)
9月8日至12日:22:34.797:W / System.err的(871):在android.os.AsyncTask $ InternalHandler.handleMessage(AsyncTask.java:429)
9月8日至12日:22:34.797:W / System.err的(871):在android.os.Handler.dispatchMessage(Handler.java:99)
9月8日至12日:22:34.808:W / System.err的(871):在android.os.Looper.loop(Looper.java:123)
9月8日至12日:22:34.808:W / System.err的(871):在android.app.ActivityThread.main(ActivityThread.java:3683)
9月8日至12日:22:34.818:W / System.err的(871):在java.lang.reflect.Method.invokeNative(本机方法)
9月8日至12日:22:34.827:W / System.err的(871):在java.lang.reflect.Method.invoke(Method.java:507)
9月8日至12日:22:34.827:W / System.err的(871):在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:839)
9月8日至12日:22:34.827:W / System.err的(871):在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
9月8日至12日:22:34.867:W / System.err的(871):在dalvik.system.NativeStart.main(本机方法)
9月8日至12日:22:34.867:E /内部异常(871):内部异常


解决方案

Siince你所得到的,而不是该行的调用getInt()行类型不匹配,

  Log.d(你的JSON阵列,jsonArray2.getInt(我)+);

您可以把它作为字符串并解析它为int。

  Log.d(你的JSON阵列的Integer.parseInt(jsonArray2.getString(I))+);

I need to save my Json Array into SharedPreferences and access it later in different Activity.

here is the example of my Json:

Array
(
    [status] => success
    [reason] => success
    [version] => 1
    [total] => Array
        (
            [category_1] => 3
            [category_2] => 3
            [category_3] => 3
        )

    [title] => Array
        (
            [category_1] => Food
            [category_2] => Drink
            [category_3] => Dessert
        )

    [data] => Array
        (
            [category_1] => Array
                (
                    [0] => Array
                        (
                            [content_id] => 123456
                            [name] => Name1
                            [title] => This is title one
                            [desc] => This is title description
                            [thumb] => http://image.jpg

                        )

                    [1] => Array
                        (...

                )

            [category_2] => Array
                (
                    [0] => Array
                        (
                            [content_id] => 123456
                            [name] => Name1
                            [title] => This is title one
                            [desc] => This is title description
                            [thumb] => http://image.jpg
                        )

                    [1] => Array
                        (...

                )

            [category_3] => Array
                (
                    [0] => Array
                        (
                            [content_id] => 123456
                            [name] => Name1
                            [title] => This is title one
                            [desc] => This is title description
                            [thumb] => http://image.jpg
                        )

                    [1] => Array
                       ( ...
                )
        )
)

MainActivity:

...
try {

                        JSONObject jObject = new JSONObject(result);
                        String status = jObject.getString("status");

                        if (status.equals("success")) {
                            // Log.e("status",status);

                            JSONObject jObject_data = new JSONObject(jObject.getString("data"));
                            JSONArray jArray_data_category_1 = new JSONArray(jObject_data.getString("category_1"));
                            JSONArray jArray_data_category_2 = new JSONArray(jObject_data.getString("category_2"));
                            //JSONArray jArray_data_category_3 = new JSONArray(jObject_data.getString("category_3"));



                            //Log.e("category_1 *****************************************", jArray_data_category_1.toString());
                            vc.insertCategory_1Pref(jArray_data_category_1.toString()); 

This is my SharedPrefInput.java:

...
public class SharedPrefInput {

    public static final String CATEGORY_1 = "CATEGORY_1";
    public static final String CATEGORY_2 = "CATEGORY_2";
    public static final String CATEGORY_3 = "CATEGORY_3";

...

Here is VarController

...
//category_1
        public void insertCategory_1Pref(String s){     
            prefSetting = context.getSharedPreferences(SharedPrefInput.DEVICE_SETTING, Context.MODE_PRIVATE);
            prefSettingEditor = prefSetting.edit();
            prefSettingEditor.putString(SharedPrefInput.CATEGORY_1, s);
            prefSettingEditor.commit();
        }

        public String readCategory_1Pref(){     
            prefSetting = context.getSharedPreferences(SharedPrefInput.DEVICE_SETTING, Context.MODE_PRIVATE);
            return prefSetting.getString(SharedPrefInput.CATEGORY_1, "00");
        }
...

And here is me trying to access it. but it don't work.

 try {
                                    JSONArray jsonArray2 = new JSONArray(sharedCategory_1Pref.getString(CATEGORY_1, status));
                                    for (int i = 0; i < jsonArray2.length(); i++) {
                                         Log.d("your JSON Array", jsonArray2.getInt(i)+"");

                                         Log.e("inside try", "inside try");
                                    }
                                } catch (Exception e) {
                                    e.printStackTrace();
                                    Log.e("inside Exception", "inside Exception");
                                }

This is the Log when i try to read the SharePref :

08-12 09:22:34.757: W/System.err(871):  at org.json.JSON.typeMismatch(JSON.java:96)
08-12 09:22:34.787: W/System.err(871):  at org.json.JSONArray.getInt(JSONArray.java:357)
08-12 09:22:34.787: W/System.err(871):  at com.example.brazilapps.MainActivity$1.onPostExecute(MainActivity.java:158)
08-12 09:22:34.787: W/System.err(871):  at com.example.brazilapps.MainActivity$1.onPostExecute(MainActivity.java:1)
08-12 09:22:34.787: W/System.err(871):  at android.os.AsyncTask.finish(AsyncTask.java:417)
08-12 09:22:34.797: W/System.err(871):  at android.os.AsyncTask.access$300(AsyncTask.java:127)
08-12 09:22:34.797: W/System.err(871):  at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:429)
08-12 09:22:34.797: W/System.err(871):  at android.os.Handler.dispatchMessage(Handler.java:99)
08-12 09:22:34.808: W/System.err(871):  at android.os.Looper.loop(Looper.java:123)
08-12 09:22:34.808: W/System.err(871):  at android.app.ActivityThread.main(ActivityThread.java:3683)
08-12 09:22:34.818: W/System.err(871):  at java.lang.reflect.Method.invokeNative(Native Method)
08-12 09:22:34.827: W/System.err(871):  at java.lang.reflect.Method.invoke(Method.java:507)
08-12 09:22:34.827: W/System.err(871):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
08-12 09:22:34.827: W/System.err(871):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
08-12 09:22:34.867: W/System.err(871):  at dalvik.system.NativeStart.main(Native Method)
08-12 09:22:34.867: E/inside Exception(871): inside Exception

解决方案

Siince you are getting type mismatch in the getInt() line, instead of the line

Log.d("your JSON Array", jsonArray2.getInt(i)+"");

you can get it as string and parse it to int.

Log.d("your JSON Array", Integer.parseInt(jsonArray2.getString(i))+"");

这篇关于如何保存一个JSON数组到共享preferences,并在不同的活动再次读取。 Android版的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆