es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Actualice la llamada de servicio genérico con métodos ‘Single’.

Tengo muchos métodos de retorno único de una llamada de API de Retrofit, como se muestra a continuación:

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

En el ViewModel estoy llamando a este servicio con CompositeDisposable agregando el método de llamada al API del servicio de la siguiente manera:

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;
            }
        }));

Siempre que escribo este disposable, lo agrego. Pero tengo que llamar a mis servicios con un método genérico como se muestra aquí. ¿Cómo puedo convertir el método safeCall para llamadas API únicas en mi ViewModel base?

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para convertir el método safeCall para llamadas API individuales en su modelo de vista base, puede crear un método genérico que acepte un Single y devuelva un Disposable. Aquí hay un ejemplo de código:

    fun <t> makeApiCall(
        single: Single<t>,
        onSuccess: (T) -> Unit,
        onError: (Throwable) -> Unit
    ): Disposable {
        return single
            .subscribeOn(Schedulers.newThread())
            .observeOn(AndroidSchedulers.mainThread())
            .subscribeWith(object : DisposableSingleObserver<t>() {
                override fun onSuccess(response: T) {
                    onSuccess(response)
                }
    
                override fun onError(e: Throwable) {
                    onError(e)
                }
            })
    }
    

    Luego puede usar este método en su modelo de vista de la siguiente manera:

    disposable.add(
        makeApiCall(
            parametreService.getKitapTurListe(),
            { response ->
                // manejar caso de éxito
            },
            { error ->
                // manejar caso de error
            }
        )
    )
    

    De esta manera, puede simplificar su código y reutilizar el mismo método para todas sus llamadas API individuales.

Comments are closed.