#java #android #arrays #json
#java #Android #массивы #json
Вопрос:
Я пытаюсь создать и сохранить JSONArray объектов (в данном случае продуктов) в приложении для Android, а затем прочитать их, когда пользователь закроет приложение.
Пока у меня есть это:
JSONArray jsArray = new JSONArray();
for(int i = 0; i<productList.size(); i ){
jsArray.put(productList.get(i));
}
FileOutputStream fos = this.openFileOutput(filename,Context.MODE_PRIVATE);
String jsonString = jsArray.toString();
fos.write(jsonString.getBytes());
fos.close();
productList
представляет собой массив объектов продукта.
Затем, когда uses закрывает и открывает приложение, это мой код для чтения:
FileInputStream fis = this.openFileInput(filename);
InputStreamReader isr = new InputStreamReader(fis);
BufferedReader bufferedReader = new BufferedReader(isr);
StringBuilder sb = new StringBuilder();
JSONObject jsonobject = new JSONObject();
String jsongString = readFromFile();
JSONArray jarray = new JSONArray(jsongString);
System.out.println("AQUI");
System.out.println(jarray.get(0));
Это не работает, я попытался получить то, что хранится, jarray
и возвращает это:
com.example.frpi.listacompra.Producto@b120c68
Кто-нибудь знает, что происходит?
РЕДАКТИРОВАТЬ: имя файла «products.json»
Комментарии:
1. Можете ли вы показать класс продукта?
2. вместо хранения в локальном файле используйте общие настройки с gson для хранения массива и объекта JSON
Ответ №1:
В этой части кода :
jsArray.put(productList.get(i));
вы пытаетесь поместить объект в свой JSONArray, и из-за этого вы сталкиваетесь с этой проблемой.
Для решения этой проблемы вы должны преобразовать свой объект в JSONObject и после этого попытаться поместить его в свой JSONArray. Например, если ваш класс продукта выглядит следующим образом :
public class Product {
private Integer id;
private String name;
public Product(Integer id, String name) {
this.id = id;
this.name = name;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
вы должны изменить свой код следующим образом:
JSONArray jsArray = new JSONArray();
for( int i =0; i<productList.size(); i ){
JSONObject jsonObject = new JSONObject();
jsonObject.put("id", productList.get(i).getId());
jsonObject.put("name", productList.get(i).getName());
jsArray.put(jsonObject);
}