Я правильно использую LiveData в этом коде? (работает) - PullRequest
0 голосов
/ 31 мая 2019

Я новичок в разработке для Android и пытаюсь использовать хороший шаблон для доступа к моим данным из веб-службы с использованием ViewModel, Retrofit, LiveData. Ищете отзывы по этому шаблону.

Я прошел несколько итераций и онлайн-руководств, и придумал это

Из упражнения:

LiveData<TicklerResponse> ticklerLiveData = 
ticklerViewModel.search(ticklerSearchObject);
    ticklerLiveData.observe(this, new Observer<TicklerResponse>() {
        @Override
        public void onChanged(@Nullable TicklerResponse ticklerResponse) {
            Log.d(TAG, "onChanged: ticklerResponse size = " + ticklerResponse.getContent().size());
        }
    });

The ViewModel

public LiveData<TicklerResponse> search(TicklerSearchObject ticklerSearchObject) {
    TicklerRepository ticklerRepository = TicklerRepository.getInstance();
    String header = OscarOAuthContainer.getInstance()
            .generateAuthorizationHeader(Verb.POST,"/tickler/search?startIndex=0&limit=1000");
    MutableLiveData<TicklerResponse> liveData = new MutableLiveData<TicklerResponse>();
    ticklerRepository.search(header,liveData, ticklerSearchObject);
    return liveData;
}

Хранилище

public void search(final String authHeader, final MutableLiveData<TicklerResponse> ticklerLiveData, TicklerSearchObject ticklerSearchObj) {
    Log.d(TAG, "search: called");
    Call<TicklerResponse> call = api.search(authHeader,0,1000,ticklerSearchObj);
    call.enqueue(new Callback<TicklerResponse>() {

        @Override
        public void onResponse(Call<TicklerResponse> call, Response<TicklerResponse> response) {
            if(response.isSuccessful()){
                Log.d(TAG, "onResponse: successful response for getProvider");
                TicklerResponse result = response.body();
                ticklerLiveData.setValue(result);
            } else {
                Log.d(TAG, "onResponse: NOT SUCCESSFUL");
            }
        }

        @Override
        public void onFailure(Call<TicklerResponse> call, Throwable t) {
            t.printStackTrace();
        }
    });

}

Кажется, это работает, но меня беспокоит, правильно ли я использую структуру LiveData в том, как она создается / передается.

...