有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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


共 (2) 个答案

  1. # 1 楼答案

    我找到了答案。 首先,我将SQL3改为SQL2,从设备中删除应用程序并安装应用程序。现在日志是:

    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,在何处发现NotNull false。我所做的一切都添加到预填充数据库中的position和proges notNull true中,因为match true=true

  2. # 2 楼答案

    就我而言

    简单解决方法:在手机上:长按应用程序->;应用程序信息->;储存及保养;内存->清除存储