房型转换器

A.B*_*dis 6 android data-conversion android-room

我不知道房间有什么大惊小怪的,因为我发现它非常糟糕。几乎没有任何事情按预期进行。对于我的问题,我想测试他们拥有的类型转换器(到目前为止很失望)。为了测试它,我根据我在网上看到的示例制作了一个简单的课程。我确信这是愚蠢的事情,甚至与代码无关,但无论如何我都会在这里尝试一下。到目前为止我有:

@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;
    }
}
Run Code Online (Sandbox Code Playgroud)

然后转换器:

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;
    }
}
Run Code Online (Sandbox Code Playgroud)

一个简单的道:

@Dao
public interface UserDao {

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

    @Query("SELECT * FROM User")
    List<User> getUsers();
}
Run Code Online (Sandbox Code Playgroud)

最后是数据库:

@Database(entities = { User.class,}, version = 1, exportSchema = false)
@TypeConverters({Converters.class})
public abstract class RoomDb extends RoomDatabase {

    public abstract UserDao userDao();

}
Run Code Online (Sandbox Code Playgroud)

我仍然得到“无法弄清楚如何将该字段保存到数据库中。您可以考虑为其添加类型转换器”。没有详细说明为什么转换器无法工作或发生了什么。为了省去麻烦,我已经尝试在字段本身上使用 @Converters,就像替代解决方案建议的那样。

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

请随意加入您的洞察力的斗争。

A.B*_*dis 6

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

这就是上面克诺索斯建议的解决方案。我最终用 ArrayList 对其进行了测试并成功了。