如何将数组对象存储到Android中的共享首选项

时间:2016-06-17 13:00:07

标签: android json android-layout sharedpreferences

我必须存储Id和最小数量转换为存储到Share Preference的数组的JSON对象。 我可以从Volley.Both项中的JSON对象获取字符串ID和最小数量必须存储在对象的共享首选项数组中,如下面JSON所述。

Json :(我想像这样存储到共享偏好)

{
  [
    "producutid" : 1
    "minqty"     : 5  
  ] 
  ,
  [
    "producutid" : 2
    "minqty"     : 5  
  ]
,  
 [
    "producutid" : 3
    "minqty"     : 5  
  ]
,  
 [
    "producutid" : 4
    "minqty"     : 5  
  ]       

}

MyWorkingCode:

   String channel = shared.getString(Constants.cartid, "{'[]','[]'}");
 JSONArray items = null;
 String wishitem;
 JSONObject jo = null;
 if (TextUtils.isEmpty(channel)) {
     jo = new JSONObject();

     try {
         jo.getJSONArray(String.valueOf(0)).put(String.valueOf(productpathid));
         jo.getJSONArray(String.valueOf(1)).put(String.valueOf(minqty));
     } catch (JSONException e) {
         e.printStackTrace();
     }
     wishitem = String.valueOf(items);
     editor.putString(Constants.cartid, wishitem);
     editor.apply();

 } else {

     try {

         Boolean found = false;
         jo = new JSONObject(String.valueOf(channel));
         items = jo.getJSONArray(String.valueOf(0));
         for (int x = 0; x < items.length(); x++) {
             if (productpathid.equalsIgnoreCase(items.getString(x))) {
                 found = true;
             }
         }
         if (!found) {
             try {
                 jo.getJSONArray(String.valueOf(0)).put(String.valueOf(productpathid));
                 jo.getJSONArray(String.valueOf(1)).put(String.valueOf(minqty));
             } catch (JSONException e) {
                 e.printStackTrace();
             }
             wishitem = String.valueOf(items);
             editor.putString(Constants.cartid, wishitem);
             editor.apply();
         }
         editor.apply();

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

我收到了错误

 org.json.JSONException: Value [] of type org.json.JSONArray cannot be converted to JSONObject

我犯了一些错误,任何人都可以告诉我这段代码的解决方案。 在此先感谢。

1 个答案:

答案 0 :(得分:0)

使用Google Gson库简化此

Gson Dependency

compile 'com.google.code.gson:gson:2.6.1'

在首选项中存储对象的ArrayList

Gson gson = new Gson();
...
ArrayList<CategoriesEntity> alSelectedCategories = new ArrayList<CategoriesEntity>();
...
String selectedCategory = gson.toJson(alSelectedCategories);
ApplicationPreferences.setValue("SelectedCategory", selectedCategory, activity);

以ArrayList

的形式取回它
UserSelectedCategory = ApplicationPreferences.getValue("SelectedCategory", activity);
if (UserSelectedCategory != null) {
       Type type = new TypeToken<ArrayList<CategoriesEntity>>() {}.getType();
            alSelectedCategories = gson.fromJson(UserSelectedCategory, type);
        }