如何在Retrofit Callback中调用intent?

我想在Retrofit调用的WebService成功回调中显示一个新活动。 我很难find有关如何使用Retrofit回调结果来启动新活动的示例。 这是一个很好的方法吗? 我以前要清理一些东西吗?

public void validate(View view) { RetrofitWebServices.getInstance().webserviceMethod(params,new Callback() { @Override public void success(MyObject object, Response response) { Intent barIntent = new Intent(FooActivity.this, BarActivity.class); startActivity(barIntent); } @Override public void failure(RetrofitError error) { ... } }); } 

您可以使用对Context弱引用来实现Callback

 public class MyCallback implements Callback { WeakReference mContextReference; public MyCallback(Context context) { mContextReference = new WeakReference(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对象的强引用。

嗨有一个似乎更容易的解决方案:使用getApplicationContext()函数。

我不是100%确定它没关系,但在我的情况下,它按预期工作。

你的代码是:

 public void validate(View view) { RetrofitWebServices.getInstance().webserviceMethod(params,new Callback() { @Override public void success(MyObject object, Response response) { Intent barIntent = new Intent(getApplicationContext(), BarActivity.class); startActivity(barIntent); } @Override public void failure(RetrofitError error) { ... } }); }