首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TypeConverter房间

TypeConverter房间
EN

Stack Overflow用户
提问于 2018-10-31 22:26:57
回答 2查看 13.9K关注 0票数 4

我不知道Room有什么可大惊小怪的,因为我觉得它很烂。几乎没有什么东西能像预期的那样工作。对于我的问题,我想测试他们的类型转换器(到目前为止令人失望)。为了测试它,我从网上看到的一个例子中创建了一个简单的类。我确信它是一些愚蠢的东西,甚至与代码无关,但无论如何我都会在这里试一试。到目前为止,我有:

代码语言:javascript
复制
@Entity
public class User {

    @PrimaryKey
    private int id;

    private String name;

    @TypeConverters(Converters.class)
    List<String> pets = new ArrayList<>();

    public User() { }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public List<String> getPets() {
        return pets;
    }

    public void setPets(List<String> pets) {
        this.pets = pets;
    }
}

然后转换器:

代码语言:javascript
复制
public class Converters {
    @TypeConverter
    public static ArrayList<String> fromString(String value) {
        Type listType = new TypeToken<ArrayList<String>>() {}.getType();
        return new Gson().fromJson(value, listType);
    }
    @TypeConverter
    public static String fromArrayList(ArrayList<String> list) {
        Gson gson = new Gson();
        String json = gson.toJson(list);
        return json;
    }
}

一个简单的dao:

代码语言:javascript
复制
@Dao
public interface UserDao {

    @Insert(onConflict = REPLACE)
    void insertUser(User user);

    @Query("SELECT * FROM User")
    List<User> getUsers();
}

最后是db:

代码语言:javascript
复制
@Database(entities = { User.class,}, version = 1, exportSchema = false)
@TypeConverters({Converters.class})
public abstract class RoomDb extends RoomDatabase {

    public abstract UserDao userDao();

}

我仍然得到“我不知道如何将这个字段保存到数据库中。你可以考虑为它添加一个类型转换器”狗屎。没有详细说明转换器不工作的原因或发生了什么。为了省去这方面的麻烦,我已经尝试使用@Converters,就像另一种解决方案所建议的那样。

到目前为止,Room让我对复杂的问题感到失望,当你的模型相当复杂时,我发现Realm和ObjectBox更一致。

请随时用你的洞察力加入这场斗争。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-11-01 23:39:05

而不是转换器类中的ArrayList。尝试列表。您的实体正在使用List作为其声明的类。这可能会有问题。

这就是上面Knossos提出的解决方案。我最终用ArrayList对其进行了测试,并工作了下来。

票数 4
EN

Stack Overflow用户

发布于 2020-05-02 01:30:40

代码语言:javascript
复制
class Convertes {

    @TypeConverter
    fun fromSource(source: Source) :String{
        return source.name
    }
    @TypeConverter
    fun  tvSource(name: String): Source {
        return Source( name,name)
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53085704

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档