【问题标题】:Retrofit generic service call with Single methods使用单一方法改造通用服务调用
【发布时间】:2022-01-11 00:07:14
【问题描述】:

我有很多来自改造 API 调用的单一返回方法,如下所示;

@GET("api/parametre/kitaptur/liste")
fun getKitapTurListe():Single<ArrayList<KitapturModel>>;

在视图模型中,我通过添加像这样的服务 api 调用方法使用 CompositeDisposable 调用此服务;

 disposible.add(
            parametreService.kitapTurKaydet(json)
                    .subscribeOn(Schedulers.newThread())
                    .observeOn(AndroidSchedulers.mainThread())
                    .subscribeWith(object : DisposableSingleObserver<ResponseStatusModel>(){
                        override fun onSuccess(response: ResponseStatusModel) {
                            parametreEklemeError.value = false;
                            parametreEklemeLoading.value = false;
                            parametreEklemeResponse.value = response;
                            customSharedPreferences.removeFromSharedPreferences(PARAM_KITAPTUR_DB_KEY);
                        }

                        override fun onError(e: Throwable) {
                            parametreEklemeError.value = true;
                            parametreEklemeLoading.value = false;
                        }
                    }));

每次我写这个一次性添加。但是我必须使用像here 这样的通用方法来调用我的服务。如何在我的基本视图模型中为单个 api 调用转换 safeCall 方法。

【问题讨论】:

    标签: android mvvm retrofit2 viewmodel kotlin-coroutines


    【解决方案1】:

    您的 safeCall 函数需要创建一个 DisposableSingleObserver 来调用传入的 DisposableSingleObserver 的相应函数以及您希望它为所有人执行的任何操作。

    //Your safeCall function should create one of these
    DisposableSingleObserver<T>() {
        override fun onSuccess(result: T) {
            yourDisposableSingleObserver.onSuccess(result)
        }
        override fun onError(e: Throwable) {
            yourDisposableSingleObserver.onError(e)
            parseError(e)
        }
    }
    

    所以现在您的通话将如下所示

     disposible.add(
                parametreService.kitapTurKaydet(json)
                        .subscribeOn(Schedulers.newThread())
                        .observeOn(AndroidSchedulers.mainThread())
                        .subscribeWith(safeCall(object : DisposableSingleObserver<ResponseStatusModel>(){ //notice the call to safeCall
                            override fun onSuccess(response: ResponseStatusModel) {
                                parametreEklemeError.value = false;
                                parametreEklemeLoading.value = false;
                                parametreEklemeResponse.value = response;
                                customSharedPreferences.removeFromSharedPreferences(PARAM_KITAPTUR_DB_KEY);
                            }
    
                            override fun onError(e: Throwable) {
                                parametreEklemeError.value = true;
                                parametreEklemeLoading.value = false;
                            }));
                        
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-14
      • 1970-01-01
      • 2013-04-01
      • 2015-01-02
      • 2016-02-05
      相关资源
      最近更新 更多