android - 如何使用 gson 将 json 转换为接口类型,但仍有可能在 RoomDatabase 中使用其他类
问题描述
我收到此错误:
无法为接口 com.jimmy.common.ItemWrapper 调用无参数构造函数。向 Gson 注册此类型的 InstanceCreator 可能会解决此问题。
我有一个which List<ItemWrapper>
may beDog
或class。我需要从 json 转换为然后在其他类中转换为,或Cat
Snake
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;
}
}
我有一个which List<ItemWrapper>
may beDog
或class。我需要从 json 转换为然后在其他类中转换为,或Cat
Snake
List<ItemWrapper>
ItemWrapper
Dog
Cat
Snake
解决方案
推荐阅读
- android - 由于 FirebaseInstanceIdReceiver 中的 Intent { act=com.google.android.c2dm.intent.RECEIVE 广播而导致 ANR
- angularjs - 如何在没有本地服务器的情况下在 Cordova 中移动 angular 1 项目
- angular - 如何根据输入值更新嵌套的反应式表单
- c# - 关注点分离的 MVC 最佳实践
- java - 来自 choco solver 的解法说明
- javascript - 从函数获取变量到另一个javascript
- mule - MEL 和 Groovy 之间的区别?
- javascript - scope.apply 在 Angular 事件处理程序中不起作用
- sql - oledb 在 Windows 2016 上连接到 SQL 2012
- python - Python Django slug url错误