Java Android:获取房间数据库中带有特定代码的项目数

Java Android:获取房间数据库中带有特定代码的项目数,java,android,sql,android-studio,android-room,Java,Android,Sql,Android Studio,Android Room,我基本上是在尝试创建某种搜索功能。我使用的是一个房间数据库,每个元素都有一个由用户提交的特定的3位数代码。但是,当我尝试获取具有特定3位代码的元素数并将其显示在主活动中的Toast消息中时,结果总是得到0 我的表的每个实体都是我创建的Word类的对象,如下所示: @Entity(tableName = "word_table") public class Word { @PrimaryKey(autoGenerate = true) @NonNull private in

我基本上是在尝试创建某种搜索功能。我使用的是一个房间数据库,每个元素都有一个由用户提交的特定的3位数代码。但是,当我尝试获取具有特定3位代码的元素数并将其显示在主活动中的Toast消息中时,结果总是得到0

我的表的每个实体都是我创建的Word类的对象,如下所示:

@Entity(tableName = "word_table")
public class Word {
    @PrimaryKey(autoGenerate = true)
    @NonNull
    private int uid;

    @ColumnInfo(name = "word_code")
    private int wordCode;

    @ColumnInfo(name = "word")
    private String word;

    public Word(int uid, int wordCode, String word){
        this.uid = uid;
        this.wordCode = wordCode;
        this.word = word;
    }
    public int getUid(){
        return uid;
    }
    public int getWordCode(){
        return wordCode;
    }
    public String getWord(){
        return word;
    }
}
我的DAO类如下所示:

@Dao
public interface WordDao {
    @Insert
    void insert(Word word);


    @Query("SELECT COUNT(*) FROM word_table WHERE word = :selectedCode")
    LiveData<Integer> getWordWithCode(int selectedCode);


}

@Database(entities = {Word.class}, version = 1, exportSchema = false)
public abstract class WordRoomDatabase extends RoomDatabase {
    public abstract WordDao wordDao();

    private static WordRoomDatabase INSTANCE;
    public static WordRoomDatabase getDatabase(final Context context){
        if (INSTANCE == null){
            synchronized (WordRoomDatabase.class){
                if (INSTANCE==null){
                    INSTANCE = Room.databaseBuilder(context.getApplicationContext(), WordRoomDatabase.class, "word_database")
                    .fallbackToDestructiveMigration()
                            .addCallback(sDatabasePopulateCallback)
                    .build();
                }
            }
        }
        return INSTANCE;
    }
    private static RoomDatabase.Callback sDatabasePopulateCallback = new RoomDatabase.Callback(){
        @Override
        public void onCreate(@NonNull SupportSQLiteDatabase db) {
            super.onCreate(db);
            new PopulateDatabaseAsync(INSTANCE).execute();
        }
    };
    private static class PopulateDatabaseAsync extends AsyncTask<Void, Void, Void> {
        private WordDao mWordDao;
        PopulateDatabaseAsync(WordRoomDatabase db){
            mWordDao = db.wordDao();
        }
        int[] discCodes = {232, 432, 523,233,242,554,221};
        String[] discNames = {"First Word", "Second Word", "Third Word", "Fourth Word", "Fifth Word", "Sixth word", "Seventh Word"};
        @Override
        protected Void doInBackground(Void... voids) {
            for (int i = 0;i < discCodes.length; i++){
                Word newWord = new Word(0, discCodes[i], discNames[i]);
                mWordDao.insert(newWord);
            }
            return null;
        }
    }
}
经过一些搜索后,我认为使用LiveData和观察者更可取。 但是,当我运行应用程序时,我得到的不是Toast消息中的1,而是0

我是android开发新手,所以我为混乱的代码和粘贴所有这些代码道歉。我一直在通过Google Codelabs教程学习Room,所以如果对Room有更好的了解可以解决我的问题,请随时向我推荐任何学习资源。
提前谢谢

您实际上是在搜索
word
而不是
wordCode

WordDao

@Query("SELECT COUNT(*) FROM word_table WHERE word_code = :selectedCode")
LiveData<Integer> getWordWithCode
@Query(“从word\u表中选择COUNT(*),其中word\u code=:selectedCode”)
LiveData getWordWithCode
public class WordViewModel extends AndroidViewModel {
    private WordRepository mRepo;

    public WordViewModel(@NonNull Application application) {
        super(application);
        mRepo = new WordRepository(application);

    }
    public void insert(Word word){
        mRepo.insert(word);
    }


    public LiveData<Integer> getCount(int givenCode){
        return mRepo.getCount(givenCode);
    }
}
public class MainActivity extends AppCompatActivity {
    private WordViewModel mWordViewModel;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mWordViewModel = ViewModelProviders.of(this).get(WordViewModel.class);


        mWordViewModel.getCount(242).observe(this, new Observer<Integer>() {
            @Override
            public void onChanged(Integer integer) {
                String toShow = Integer.toString(integer);
                Toast.makeText(getApplicationContext(), toShow, Toast.LENGTH_SHORT).show();
            }
        });
    }
}
@Query("SELECT COUNT(*) FROM word_table WHERE word = :selectedCode")
    int getWordWithCode(int selectedCode);
@Query("SELECT COUNT(*) FROM word_table WHERE word_code = :selectedCode")
LiveData<Integer> getWordWithCode