如何保存一个JSON数组到共享preferences,并在不同的活动再次读取。 Android版 [英] How to save a JSON array into SharedPreferences and read again in a different activity. Android
本文介绍了如何保存一个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屋!
查看全文