我必须存储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
我犯了一些错误,任何人都可以告诉我这段代码的解决方案。 在此先感谢。
答案 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);
}