web-dev-qa-db-ja.com

Retrofitがリクエストで失敗または成功した場合に、リポジトリとViewModelクラスの間で通信する方法は?

長年、私はMVPパターンでAndroidアプリを開発してきましたが、現在MVVMViewModelLiveDataを学習しようとしています

次の例では、POSTまたはGETリクエストでRetrofitを使用して失敗または成功した結果を伝える方法が得られません。

以前はMVPを使用して、リスナーを使用してプレゼンターとlistener.onTodoFetched()またはlistener.onTodoFetchError()のいずれかと通信し、呼び出されたメソッドに基づいて異なる反応をしていました。この方法でViewModelクラスと通信する必要がありますか?

FetchTodoRepository.Java

public MutableLiveData<String> fetchTodo() {
    retrofitService.getRetrofitService().create(Endpoints.class).getTodo().enqueue(new Callback<String>() {
        @Override
        public void onResponse(Call<String> call, Response<String> response) {

            if (response.isSuccessful() && response.body() != null) {
                listener.onTodoFetched(response.body());     //ViewModel equivalent?
            } else {
                listener.onTodoFetchError(response.message());     //ViewModel equivalent?
            }

        }

        @Override
        public void onFailure(Call<String> call, Throwable t) {
            listener.onTodoFetchError(t.getMessage());     //ViewModel equivalent?
        }
    });

    return mutableLiveData;
}

更新:

回答とさらなる調査に基づいて、次の方法を使用できます。

  • 単純なJavaクラス間のリスナー
  • RxJava
  • Kotlin高次関数。
4
Muddz

高次関数を使用したリポジトリとViewModel間の通信 引数としてリポジトリメソッドに関数を渡す

このようなリポジトリメソッドの例:

fun repoMethod(id : Int, viewModelCallBack : (List<CustomeDto>) -> Unit)
{
     //Your API call
     .....
    viewModelCallBack(response.body())

}

のようなモデルメソッドを見る

    fun viewModelMethod()
    {
       repoObj.repoMethod(5){ listOfValueReturnFromApi ->
            //Here listOfValueReturnFromApi is API response using Higher Order function in kotlin
        }

    }
1
Mitesh Vanaliya