Search code examples
javarepositoryandroid-roomviewmodel

How to add ROOM queries that take parameters and return data


I am trying to create a new room database query that takes a parameter and returns a list. All the documents I read and videos I watch only show me as far as the DAO query (which I have done) but what I cannot find is how to create the subsequent queries for repository and viewModel classes. This is my DAO query;

@Query("SELECT * FROM member WHERE name = :reselectedPlayerName")
List<Member> getPlayersForReselection(String reselectedPlayerName);

I have successfully created a 'LiveData' query (for another task) which does not take any parameters, but I do NOT want a Livedata query this time and I cannot see how to create the query in the repository class.


Solution

  • The answer as always is generally simple!... but when you cannot see the wood for the trees.... If anybody wants more detail, I am happy to detail what I found and what I did but this is what I ended up doing; (I know I said I didn't want to use LiveData but I did just for proving)

    DAO

    @Query("SELECT * FROM member WHERE name = :aStr")
    LiveData<List<Member>> getPlayersForReselectionDb(String aStr);
    

    REPOSITORY

    public LiveData<List<Member>> getPlayersForReselectionDb(String aStr){
        reselectedMembers = memberDAO.getPlayersForReselectionDb(aStr);
        return reselectedMembers;
    }
    

    VIEWMODEL

    public LiveData<List<Member>> getPlayersForReselectionDb(String aStr) {
        reselectedMembers = memberRepository.getPlayersForReselectionDb(aStr);
        return reselectedMembers;
    }
    

    FRAGMENT

    MemberViewModel memberViewModel = new 
    ViewModelProvider(this).get(MemberViewModel.class);
    
    memberViewModel.getPlayersForReselectionDb("Fred Bloggs").observe(this, 
    new Observer<List<Member>>() {
        @Override
        public void onChanged(List<Member> members) {`enter code here`}
        }
    });