長年、私はMVPパターンでAndroidアプリを開発してきましたが、現在MVVM
とViewModel
とLiveData
を学習しようとしています
次の例では、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;
}
更新:
回答とさらなる調査に基づいて、次の方法を使用できます。
高次関数を使用したリポジトリと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
}
}