создать две таблицы, используя один и тот же класс в базе данных комнаты - PullRequest
0 голосов
/ 24 июня 2018

Я использую Room в качестве базы данных для приложения. Я получаю данные с сервера, используя Retrofit. Сценарий: у меня есть класс с именем Photo и аннотированный Entity для использования комнатой, и я использую этот класс для отображения ответа API с помощью retroft. мне нужно создать две таблицы, используя один и тот же класс, например: таблицу latest_photos и таблицу Popular_photos. Как мне этого добиться.

  • Я не хочу создавать новый класс и расширять его от других
  • У меня есть идея использовать одну таблицу путем вставки нового столбца это указывает на погоду фотография популярна или последняя, ​​но я не знаю как это эффективно реализовать.

    public void insertPhotos (окончательный список фотографий) { ioExecutor.execute (new Runnable () { @Override public void run () { photoDao.bulkInsert (updateList (фото)); } }); }

здесь я вставляю список фотографий (состоит из 20 фотообъектов). Как я могу добавить новое поле для каждого фото объекта. Я пытался использовать для цикла, но это занимает заметное время, так как я не получаю только 20 элементов, но делаю пагинацию через веб-сервер.

  • есть ли способ добавить новое значение для отклика и сопоставления дооснащения это к фото классу

1 Ответ

0 голосов
/ 27 июня 2018

Я решил проблему, теперь я имею дело только с одной таблицей. Я вставил новый столбец, который указывает, является ли фотография популярной или последней, но проблема в том, что сервер не возвращает никаких полезных данных для заполнения этого столбца. поэтому единственное решение - изменить ответ json перед отображением на мою сущность. поэтому сделать вызов дооснащения, возвращающий тип, равным ResponseBody , чтобы вернуть саму строку json, а не отображать ее, поэтому я могу добавить свойство в ответ json, а затем сопоставить его с добавленным свойством.

  private void processData(Response<ResponseBody> response) {
        if (response.isSuccessful()) {
            try {

                JSONObject jsonObject = new JSONObject(response.body().string());
                JSONArray hits = jsonObject.getJSONArray("hits");
                List<Photo> photos = new ArrayList<>();
                for (int i = 0; i < hits.length(); i++) {
                    JSONObject photoJSONObject = hits.getJSONObject(i);

                    photoJSONObject.put("order", order); // add new property

                    String json = photoJSONObject.toString();

                    Gson gson = new Gson();

                    Photo photo = gson.fromJson(json, Photo.class);

                    photos.add(photo);


                }
...