Хранить JSONArray объектов внутри и читать их позже ANDROID

#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);
}