Как преобразовать JSON с помощью GSON в тип интерфейса, но все еще есть возможность использовать другие классы в RoomDatabase - PullRequest
0 голосов
/ 21 января 2019

Я получаю эту ошибку:

Невозможно вызвать конструктор без аргументов для интерфейса com.jimmy.common.ItemWrapper. Регистрация InstanceCreator в Gson для этого типа может решить эту проблему.

У меня есть List<ItemWrapper>, который может быть Dog, Cat или Snake класса. Мне нужно конвертировать из json в List<ItemWrapper>, а затем в другие классы, чтобы конвертировать ItemWrapper в Dog, Cat или Snake

Я попытался найти несколько примеров InstanceCreater, но ничего не понял.

Мой интерфейс и ItemWrapperConverter:

public interface ItemWrapper{
  int getViewType();
  int getId();
  void setId(int id);

  // делать их пустыми для всех кроме тех кому они нужны
  void setName(String n);
  void setDescription(String d);
  void setColor(String c);
  void changeNote(int i, String k, String p, long l);
  void changeNote(String k, String p, long l);
  void addNote(Note n);
  void deleteNote(int i);
}

public class ItemWrapperConverter {
@TypeConverter
public String fromItemWrapper(List<ItemWrapper> itemWrappers) {
    if (itemWrappers == null) {
        return (null);
    }
    Gson gson = new Gson();
    Type type = new TypeToken<List<ItemWrapper>>() {
    }.getType();
    String json = gson.toJson(itemWrappers, type);
    return json;
  }

@TypeConverter
public List<ItemWrapper> toItemWrapper(String ItemWrapperString) {
    if (ItemWrapperString == null) {
        return (null);
    }
    Gson gson = new Gson();
    Type type = new TypeToken<List<ItemWrapper>>() {
    }.getType();
    List<ItemWrapper> itemWrappers = gson.fromJson(ItemWrapperString, type);
    return itemWrappers;
 }
}

У меня есть List<ItemWrapper>, который может быть Dog, Cat или Snake класса. Мне нужно конвертировать из json в List<ItemWrapper>, а затем в другие классы конвертировать ItemWrapper в Dog, Cat или Snake

1 Ответ

0 голосов
/ 23 января 2019

Ответ Valgaal

, следуйте этому учебнику , но вместо T используйте Object.Если у вас есть проблемы, удалите, например, метод serialize() и сгенерируйте реализацию.В моей ситуации мне пришлось изменить T с Object

...