首页 > 解决方案 > 如何使用 gson 将 json 转换为接口类型,但仍有可能在 RoomDatabase 中使用其他类

问题描述

我收到此错误:

无法为接口 com.jimmy.common.ItemWrapper 调用无参数构造函数。向 Gson 注册此类型的 InstanceCreator 可能会解决此问题。

我有一个which List<ItemWrapper>may beDog或class。我需要从 json 转换为然后在其他类中转换为,或CatSnakeList<ItemWrapper>ItemWrapperDogCatSnake

我试图找到一些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;
 }
}

我有一个which List<ItemWrapper>may beDog或class。我需要从 json 转换为然后在其他类中转换为,或CatSnakeList<ItemWrapper>ItemWrapperDogCatSnake

标签: androidinterfacegsonandroid-room

解决方案


瓦尔加尔回答

遵循本教程,但使用 Object 代替 T。如果您有问题,请删除例如serialize()方法并生成实现。T在我的情况下,我不得不改变Object


推荐阅读