java为什么在RoomDatabase中使用createFromAsset时数据库为空。列表的大小为0,但预填充的数据库有8项
这是我的数据库
@Database(entities = {Word.class}, version = 1, exportSchema = false)
public abstract class WordsDatabase extends RoomDatabase {
private static final String DB_NAME = "words";
private static WordsDatabase database;
private static final Object LOCK = new Object();
public static WordsDatabase getInstance(Context context) {
synchronized (LOCK){
if(database == null) {
database = Room.databaseBuilder(context,WordsDatabase.class, DB_NAME)
.createFromAsset("words.db")
.allowMainThreadQueries()
.build();
Log.i("1111", "database was created now");
} else {
Log.i("1111", "was already created");
}}
return database;
}
public abstract WordsDao wordsDao();
这是我的刀
@Dao
public interface WordsDao {
@Query("SELECT * FROM pronouns")
List<Word> getAllWords();
@Query("SELECT * FROM pronouns WHERE wordRus == :wordRus")
Word getWordByWord(String wordRus);
这是我的实体
@Entity(tableName = "pronouns")
public class Word {
@PrimaryKey
private int position;
private String wordRus;
private String wordHin;
private String wordDev;
private int progress;
1 constructor with all fields, getters, setters...
这是我的onCreate()
database = WordsDatabase.getInstance(this);
Word word = database.wordsDao().getWordByWord("я");
Log.i("1111", word.getWordRus());
这是我的日志
I/1111: database was created now
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method
'java.lang.String com.vazheninapps.hindipoliglot.data.Word.getWordRus()' on a
null object reference
这是我的话。资产中的数据库(SQL2数据库)SQLSTUDIOIMAGE
我做错了什么?为什么数据库为空?我还尝试了getAllWords()方法。并返回列表的大小。它是0
# 1 楼答案
我找到了答案。 首先,我将SQL3改为SQL2,从设备中删除应用程序并安装应用程序。现在日志是:
==================
有错误的预期和发现顺序,但这并不重要。重要的是,在何处应为NotNull true,在何处发现NotNull false。我所做的一切都添加到预填充数据库中的position和proges notNull true中,因为match true=true
# 2 楼答案
就我而言
简单解决方法:在手机上:长按应用程序->;应用程序信息->;储存及保养;内存->清除存储