这是我的数据库。
@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
@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中的words.db
我做错了什么?为什么数据库为空?我也尝试方法getAllWords()。并返回列表的大小。它是0。
我找到了答案。首先,我将SQL3改为SQL 2,从设备中删除应用程序并安装应用程序。现在日志是:
java.lang.IllegalStateException: Pre-packaged database has an invalid schema: pronouns
Expected:
TableInfo{name='pronouns', columns={progress=Column{name='progress', type='INTEGER', affinity='3', notNull=true, primaryKeyPosition=0, defaultValue='null'}, wordRus=Column{name='wordRus', type='TEXT', affinity='2', notNull=false, primaryKeyPosition=0, defaultValue='null'}, position=Column{name='position', type='INTEGER', affinity='3', notNull=true, primaryKeyPosition=1, defaultValue='null'}, wordHin=Column{name='wordHin', type='TEXT', affinity='2', notNull=false, primaryKeyPosition=0, defaultValue='null'}, wordDev=Column{name='wordDev', type='TEXT', affinity='2', notNull=false, primaryKeyPosition=0, defaultValue='null'}}, foreignKeys=[], indices=[]}
Found:
TableInfo{name='pronouns', columns={wordRus=Column{name='wordRus', type='TEXT', affinity='2', notNull=false, primaryKeyPosition=0, defaultValue='null'}, wordHin=Column{name='wordHin', type='TEXT', affinity='2', notNull=false, primaryKeyPosition=0, defaultValue='null'}, progress=Column{name='progress', type='INTEGER', affinity='3', notNull=false, primaryKeyPosition=0, defaultValue='null'}, position=Column{name='position', type='INTEGER', affinity='3', notNull=true, primaryKeyPosition=1, defaultValue='null'}, wordDev=Column{name='wordDev', type='TEXT', affinity='2', notNull=false, primaryKeyPosition=0, defaultValue='null'}}, foreignKeys=[], indices=[]}
=========
progress=Column{name='progress', type='INTEGER', affinity='3', notNull=true, primaryKeyPosition=0, defaultValue='null'}
progress=Column{name='progress', type='INTEGER', affinity='3', notNull=false, primaryKeyPosition=0, defaultValue='null'}
wordRus=Column{name='wordRus', type='TEXT', affinity='2', notNull=false, primaryKeyPosition=0, defaultValue='null'}
wordRus=Column{name='wordRus', type='TEXT', affinity='2', notNull=false, primaryKeyPosition=0, defaultValue='null'}
position=Column{name='position', type='INTEGER', affinity='3', notNull=true, primaryKeyPosition=1, defaultValue='null'}
position=Column{name='position', type='INTEGER', affinity='3', notNull=true, primaryKeyPosition=1, defaultValue='null'}
wordHin=Column{name='wordHin', type='TEXT', affinity='2', notNull=false, primaryKeyPosition=0, defaultValue='null'}
wordHin=Column{name='wordHin', type='TEXT', affinity='2', notNull=false, primaryKeyPosition=0, defaultValue='null'}
wordDev=Column{name='wordDev', type='TEXT', affinity='2', notNull=false, primaryKeyPosition=0, defaultValue='null'}}, foreignKeys=[], indices=[]}
wordDev=Column{name='wordDev', type='TEXT', affinity='2', notNull=false, primaryKeyPosition=0, defaultValue='null'}}, foreignKeys=[], indices=[]}
期望和发现的顺序错误,但这并不重要。在预期的NotNull为true且Found Notnull为false的地方进行操作。我所做的全部添加到位置,并在预填充的数据库中显示notNull true,以匹配true = true。