记录Android Room框架无法更新数据问题
今天在使用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框架遇到的坑,希望对初学者能有写帮助!