我想在Retrofit调用的WebService成功回调中显示一个新活动。 我很难找到有关如何使用Retrofit回调结果来启动新活动的示例。 这是一个很好的方法吗?我以前需要清理一些东西吗?
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) {
...
}
});
}
答案 0 :(得分:8)
您可以使用弱引用Callback
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
}
}
请记住 - 如果在执行请求期间Context
丢失,此解决方案将无效,但您可能不担心潜在的内存泄漏,如果您继续强烈引用Context
对象
答案 1 :(得分:2)
您有一个似乎更容易的解决方案:使用getApplicationContext()
函数。
我不是100%确定它没问题,但在我的情况下它按预期工作。
您的代码将是:
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) {
...
}
});
}