今天在使用room框架的時候遇到一個嚴重的問題:無法更新數(shù)據(jù)!
正常使用room的人都知道,更新數(shù)據(jù)只要在自己的Dao目錄下寫好update方法,外部調(diào)用就可以了,例如:
@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();
}
這樣的例子網(wǎng)上一搜全都是,實體類一般也是如下這樣寫:
public class User {
@PrimaryKey(autoGenerate =true)//主鍵是否自動增長,默認為false
? ? private int id;
? ? private String uuid;
? ? private String name="";//名稱
? ? public String account ="";//賬號
}
設(shè)置一個int值的id,因為才開始使用room框架,都是參考的網(wǎng)上例子,因為需要一個string值的id也作為主鍵(當時沒有仔細看room文檔),但是默認又不支持string值作為主鍵,就一直感覺這個int值的id除了添加數(shù)據(jù)的時候會自動換行添加數(shù)據(jù)外,感覺沒什么用然后就坑了,activity里面寫update方法時,發(fā)現(xiàn)數(shù)據(jù)居然沒有變化!這可嚇到我了,要知道這時候如果room的框架不能用了,我這白忙活的幾天了,然后就找相關(guān)資料,最后發(fā)現(xiàn),是這個int值的id坑了我?。≡挷欢嗾f,修改一下以后,數(shù)據(jù)就可以更新了!,方法如下:
public class User {
@PrimaryKey(autoGenerate =true)//主鍵是否自動增長,默認為false
? ? private int id;
? ? private String uuid="";
? ? private String name="";//名稱
? ? public String account ="";//賬號
}
樓主是將int值的id刪除(用不到),然后設(shè)置uuid作為主鍵id:
@Entity(primaryKeys="uuid")
public class User {
@NonNull
? ? private String uuid="";
? ? private String name="";//名稱
? ? public String account ="";//賬號
}
ps:在uuid上方需要寫注解@NonNull,不然運行的時候會報錯!
好了,以上就是樓主初次使用room框架遇到的坑,希望對初學者能有寫幫助!