开发指南

记录Android Room框架无法更新数据问题

2019-03-01  本文已影响0人  幼稚_cd30

今天在使用room框架的时候遇到一个严重的问题:无法更新数据

正常使用room的人都知道,更新数据只要在自己的Dao目录下写好update方法,外部调用就可以了,例如:

@Dao

public interface UserDao {

    //增

    @Insert

    void insert(User... users);

    //删

    @Query("DELETE FROM user")

    void deleteAll();

    //改

    @Update

    void update(User... users);

    //查全部

    @Query("SELECT * FROM user")

    List<User> getAllUsers();

}

这样的例子网上一搜全都是,实体类一般也是如下这样写:

public class User {

@PrimaryKey(autoGenerate =true)//主键是否自动增长,默认为false

    private int id;

    private String uuid;

    private String name="";//名称

    public String account ="";//账号

}

设置一个int值的id,因为才开始使用room框架,都是参考的网上例子,因为需要一个string值的id也作为主键(当时没有仔细看room文档),但是默认又不支持string值作为主键,就一直感觉这个int值的id除了添加数据的时候会自动换行添加数据外,感觉没什么用然后就坑了,activity里面写update方法时,发现数据居然没有变化!这可吓到我了,要知道这时候如果room的框架不能用了,我这白忙活的几天了,然后就找相关资料,最后发现,是这个int值的id坑了我啊!话不多说,修改一下以后,数据就可以更新了!,方法如下:

public class User {

@PrimaryKey(autoGenerate =true)//主键是否自动增长,默认为false

    private int id;

    private String uuid="";

    private String name="";//名称

    public String account ="";//账号

}

楼主是将int值的id删除(用不到),然后设置uuid作为主键id:

@Entity(primaryKeys="uuid")

public class User {

@NonNull

    private String uuid="";

    private String name="";//名称

    public String account ="";//账号

}

ps:在uuid上方需要写注解@NonNull,不然运行的时候会报错!

好了,以上就是楼主初次使用room框架遇到的坑,希望对初学者能有写帮助!

上一篇 下一篇

猜你喜欢

热点阅读