Recuperar respuesta JSON de rxjava / retrofit request POST
Creé una request POST utilizando rxjava y la actualización que acierta con éxito en mi server back-end e inicia session en el usuario (obtengo una respuesta 201 en mi console, todo bien). Sin embargo, quiero recuperar el token de acceso de los usuarios que se devuelve, pero cuando bash acceder al resultado de rxjava, solo me da el object que le pasé. En ninguna parte puedo encontrar la manera de get la respuesta exitosa de json. También he verificado que de hecho hay una respuesta en Cartero, así que es algo con respecto a cómo hago esta llamada.
Aquí está mi porción de Retrofit
- ¿Cómo no emitir datos de Flowable para testings unitarias?
- MVP + RxJava - ¿Poner los progtwigdores en el presentador o en el interaccionador?
- RxJava2 cómo separar diferentes implementaciones de emisor observable
- Conmutación de Observables
- Operador RxJava para el método de conmutación
@Headers("Content-Type: application/json") @POST("api/v1/login") fun loginTask(@Body cnetworkingentials: UserLogin) : Observable<UserLogin>
Y la function API correspoinding
class ApiFunctions(val apiService: LunchVoteApi) { fun provideHello(): io.reactivex.Observable<Hello> { return apiService.helloMessage() } fun loginTask(email: String, password: String): io.reactivex.Observable<UserLogin> { val cnetworkingentials: UserLogin = UserLogin(email, password) return apiService.loginTask(cnetworkingentials) } }
El model UserLogin deserializado por Gson
data class UserLogin( @SerializedName("email") val email: String, @SerializedName("password") val password: String )
Y finalmente la llamada en mi LoginActivity
val loginTask = ApiProvider.provideLoginTask() override fun doInBackground(vararg params: Void): Boolean? { // TODO: attempt authentication against a network service. try { // Simulate network access. // Thread.sleep(2000) compositeDisposable.add( loginTask.loginTask(mEmail, mPassword) .observeOn(AndroidSchedulers.mainThread()) .subscribeOn(Schedulers.io()) .subscribe ({ result -> System.out.println(result.toString()) }, { error -> System.out.println(error) }) ) } catch (e: InterruptedException) { return false }
La confusión surge cuando bash acceder al resultado -> porción de la llamada compuesta desechable. Simplemente imprime el object UserLogin. ¿Me estoy perdiendo de algo? Gracias.
- Implementando la búsqueda que empuja los resultados a la list tan pronto como estén disponibles usando rxJava
- Temporizador RxJava2 y combinar
- No se llama a ninguno de los suscriptores de RxJava onNext / onError / onComplete al encadenar Observables creado desde Observable.create ()
- ¿Cómo se coordina una list de ejecuciones Completables con RxJava?
- Filter rxjava no funciona
- RxAndroid, cómo detectar si observable ha finalizado la emisión
- Modelo lleno con respuesta extra usando Rx
- Observable con el valor de LatestFrom
Resulta que estaba devolviendo mi tipo de UserLogin en lugar de un object pojo con una propiedad token de acceso.
Cambiando mi llamada de @Headers("Content-Type: application/json") @POST("api/v1/login") fun loginTask(@Body cnetworkingentials: UserLogin) : Observable<AccessToken>
a @Headers("Content-Type: application/json") @POST("api/v1/login") fun loginTask(@Body cnetworkingentials: UserLogin) : Observable<AccessToken>
Y creando un nuevo model
data class AccessToken( @SerializedName("accessToken") val email: String )
Ahora puedo imprimir el token. Gracias a @ john-oreilly
- ¿Cuál es la forma correcta de crear y publicar la biblioteca de Kotlin para evitar el problema de múltiples times de ejecución?
- ¿Por qué el tipo de expresión objectOfTypeT :: class es KClass <out T>?