Комната: Как запросить arraylist в Entity? - PullRequest
0 голосов
/ 10 февраля 2019

У меня есть активность, где пользователи могут видеть все заметки в RecyclerView.Я загружаю эти заметки как

LiveData<List<Note>> 

, используя ViewModel с базой данных Android Room, поэтому, если пользователь редактирует заметку, изменения немедленно отражаются.

Entity - Note.class

@Entity(tableName = "note_table")
public class Note {
    @PrimaryKey(autoGenerate = true)
    private int id;
    private String title;
    private ArrayList<String> labels;

    public Note(String title, ArrayList<String> labels) {
        this.title = title;
        this.labels = labels;
    }

    public ArrayList<String> getLabels() { return labels; }
    public void setLabels(ArrayList<String> labels) { this.labels = labels; }

    public int getId() { return id; }
    public void setId(int id) { this.id = id; }
    public String getTitle() { return title; }
    public void setTitle(String title) { this.title = title; }
}

MainActivity.class

noteViewModel = ViewModelProviders.of(this).get(NoteViewModel.class);
noteViewModel.getAllNotes().observe(this, new Observer<List<Note>>() {
    @Override
    public void onChanged(List<Note> notes) {
        adapter.submitList(notes);
    }
});

У меня также есть навигационный ящик.Существует список меток, которые пользователь создает и может нажать на них.Например, заметка может иметь одну метку: «to-do» или несколько: «список покупок» и «работа».Пользователь может затем установить эти метки для заметки.Если щелкнуть ярлык, то RecyclerView следует отфильтровать для заметок с этим ярлыком.

Например, пользователь нажимает «работа»

noteViewModel.setFilterAllData("work");

В NoteViewModel:

public class NoteViewModel extends AndroidViewModel {
    private NoteRepository repository;
    private LiveData<List<Note>> allNotes;
    private MutableLiveData<Property> filterAllData = new MutableLiveData<>();


    public NoteViewModel(@NonNull Application application) {
        super(application);
        repository = new NoteRepository(application);
        allNotes = Transformations.switchMap(filterAllData, new Function<Property, LiveData<List<Note>>>() {
            @Override
            public LiveData<List<Note>> apply(Property input) {
                return repository.filterAll(input);
            }
        });
    }

    void setFilterAllData(String labelName) {filterAllData.setValue(labelName);}

    public long insert(Note note) { return repository.insert(note); }

    public void update(Note note) { repository.update(note); }

    public void delete(Note note) { repository.delete(note); }

    LiveData<Note> getNote(int id) { return repository.getNote(id); }

В NoteRepository.class

LiveData<List<Note>> filterAll(String label) {
    return noteDao.getNotesWLabel(label);
}

Dao - NoteDao.class

@Dao
public interface NoteDao {
    @Insert
    long insert(Note note);

    @Update
    void update(Note note);

    @Delete
    void delete(Note note);

    @Query("SELECT * FROM note_table")
    LiveData<List<Note>> getAllNotes();

    @Query("SELECT * FROM note_table WHERE :label IN (labels)")
    LiveData<List<Note>> getNotesWLabel(String label);

Я попытался добавить преобразователи типов, как предлагается здесь: https://stackoverflow.com/a/45071364/4673960, но когда я фильтруюдля ярлыка просмотрщик пуст.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...