¿Cómo llamo a una intención en Retrofit Callback?
Quiero mostrar una nueva actividad en callback de éxito de mi WebService llamado por Retrofit. Y tengo dificultades para encontrar ejemplos sobre cómo usar el resultado de retroalimentación de Retrofit para iniciar una nueva actividad. ¿Es una buena manera de hacerlo? ¿Tengo que limpiar algunas cosas antes?
public void validate(View view) { RetrofitWebServices.getInstance().webserviceMethod(params,new Callback<MyObject>() { @Override public void success(MyObject object, Response response) { Intent barIntent = new Intent(FooActivity.this, BarActivity.class); startActivity(barIntent); } @Override public void failure(RetrofitError error) { ... } }); }
- Retrofit 2.0 cómo imprimir la respuesta json completa?
- Obtenga un objeto json simple usando retrofit 2
- GSON ignorar elementos con tipo incorrecto
- Retrofit POST con nombres de parámetros de cuerpo personalizados
- Obtenga el código de estado de la respuesta utilizando Retrofit 2.0 y RxJava
- ¿Cuándo se debe usar RxJava Observable y cuándo Callback simple en Android?
- Problema con Retrofit y simple - intento de hacer un lector de RSS para Android
- Cómo implementar un WebSocket con Retrofit + RX
- Retrofit Se esperaba BEGIN_OBJECT pero era BEGIN_ARRAY
- RedDit oAuth 2 para Android aplicación "sin usuario" con Retrofit
- ¿Cómo manejar parámetros que pueden ser ARRAY u OBJECT en Retrofit en Android?
- Cómo POST JSON todo en bruto en el cuerpo de una solicitud de Retrofit?
- Cómo hacer la solicitud https con certificado SSL en Retrofit
Puede implementar Callback
con referencia débil al Context
public class MyCallback implements Callback<MyObject> { WeakReference<Context> mContextReference; public MyCallback(Context context) { mContextReference = new WeakReference<Context>(context); } @Override public void success(MyObject arg0, Response arg1) { Context context = mContextReference.get(); if(context != null){ Intent barIntent = new Intent(FooActivity.this, BarActivity.class); context.startActivity(barIntent); } else { // TODO process context lost } } @Override public void failure(RetrofitError arg0) { // TODO process error } }
Sólo recuerde – esta solución no funcionará si se produjo pérdida de Context
durante la solicitud en curso, pero es posible que no se preocupe por la posible pérdida de memoria que puede ser si mantiene una referencia fuerte al objeto Context
.
Hola tenemos una solución que parece más fácil: use la función getApplicationContext()
.
No estoy 100% seguro de que está bien, pero en mi caso funciona como se esperaba.
Su código sería:
public void validate(View view) { RetrofitWebServices.getInstance().webserviceMethod(params,new Callback<MyObject>() { @Override public void success(MyObject object, Response response) { Intent barIntent = new Intent(getApplicationContext(), BarActivity.class); startActivity(barIntent); } @Override public void failure(RetrofitError error) { ... } }); }