如何使用 gson 将 json 转换为接口类型,但仍有可能在 RoomDatabase 中使用其他 类

How to convert json using gson to interface type, but still have possibility to use other classes in RoomDatabase

我收到这个错误:

Unable to invoke no-args constructor for interface com.jimmy.common.ItemWrapper. Registering an InstanceCreator with Gson for this type may fix this problem.

我有一个 List<ItemWrapper>,可能是 DogCatSnake class。我需要从 json 转换为 List<ItemWrapper>,然后在其他 classes 中将 ItemWrapper 转换为 DogCatSnake

我试图找到一些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>,可能是 DogCatSnake class。我需要从 json 转换为 List<ItemWrapper>,然后在其他 classes 中将 ItemWrapper 转换为 DogCatSnake

回答者Valgaal

遵循此 tutorial 但使用 Object 而不是 T。如果您遇到问题,请删除例如 serialize() 方法并生成实现。在我的情况下,我不得不将 T 更改为 Object