我在会议室数据库中有一个笔记列表。我想根据某些特征选择特定注释的列表。对于这个建议,我将第二个字段note_second_id添加到PrimaryKey:
@PrimaryKey(autoGenerate = true)
private long note_id;
private long note_second_id;
然后创建下一个查询:
@Query("SELECT * FROM " + Constants.TABLE_NAME_NOTE + " WHERE note_second_id = :second_id ")
List<Note> getNotes(long second_id);
我想添加新笔记时使用:
long j = activityReference.get().dataBase.getNoteDao().insertNote(note);
deck.setNote_id(j);
deck.setNote_second_id(note000);
.setNote_id()和setNote_second_id()方法的外观如下:
public void setNote_id(long deck_id) {this.note_id = note_id; }
public void setNote_second_id(long notesecondid) {
this.note_second_id = notesecondid; }
并且note000是一个常数:
Long note000 = 11111L;
在活动中,我希望显示以下列表:
private class RetrieveTaskDeck extends AsyncTask<Void,Void,List<Deck>> {
private WeakReference<MainActivity> activityReference;
// only retain a weak reference to the activity
RetrieveTaskDeck(MainActivity context) {
activityReference = new WeakReference<>(context); }
@Override
protected List<Note> doInBackground(Void... voids) {
if (activityReference.get()!=null)
return activityReference.get().dataBase.getNotesDao().getNotes(note000);
else
return null; }
@Override
protected void onPostExecute(List<Note> notes) {
if (notes !=null && notes.size()>0 ){
activityReference.get().notes.clear();
activityReference.get().notes.addAll(notes);
// hides empty text view
activityReference.get().textViewMsgDeck.setVisibility(View.GONE);
activityReference.get().decksAdapter.notifyDataSetChanged(); } } }
问题是这种方式不起作用。它不显示任何注释。仅当我使用查询时:
@Query("SELECT * FROM " + Constants.TABLE_NAME_NOTE)
List<Note> getAllNotes();
和
activityReference.get().dataBase.getNotesDao().getAllNotes();
只有这样,我才能获得所有笔记的列表。但是我只需要显示一些特殊标记的注释。
出什么问题了,我该怎么办?查询似乎出了点问题...也许有人在处理房间数据和查询方面有经验,可能会提供一些建议...
答案 0 :(得分:0)
实际上,我已经解决了这个问题。这是一个解决方案。 我使用了下一个查询:
@Query("SELECT * FROM " + Constants.TABLE_NAME_NOTE + " where note_content LIKE :second_id ")
List<Note> getNotes(String second_id);
其中“ note_content”是列名,“ second_id”是第一行,写在列名之后:
@ColumnInfo(name = "note_content")
private String second_id;
请注意,如果我在声明该列之后的第一个String值(第二个或第三个)之后的某个位置写String second_id,则它不会通过该单词进行搜索。但是通过这种方式,上面已经写好了。
因此,我可以根据任务动态设置该列的String值“ second_id”,并且用户不需要知道它甚至存在。我尝试使用PrimaryKey中的ID来解决相同的任务,但是没有用。实际上,在Column中使用String值是可行的。希望它会帮助某人。另外,如果有人知道如何使用PrimaryKey中的ID解决相同的任务,请让我知道在此处编写解决方案。