1
我在我最新的Android应用程序中使用Retrofit实施了Facebook登录。在SplashActivity和LoginActivity,我想让我的POST请求:避免重复的翻新回调
FacebookLoginInfo facebookLoginInfo = new FacebookLoginInfo(token);
Call<User> call = ApiManager.getService().authenticateFacebookUser(facebookLoginInfo);
call.enqueue(userCallback);
FacebookLoginInfo是一个简单的POJO与Facebook的访问令牌。 ApiManager是我的服务的单例类。
我的问题是,userCallback在SplashActivity和LoginActivity中重复。有没有最佳做法来定义此回调只有一次?用户回调
定义:
private Callback<User> mUserCallback = new Callback<User>() {
@Override
public void onResponse(Call<User> call, Response<User> response) {
dismissProgressDialog();
int statusCode = response.code();
if (statusCode == 200) {
User user = response.body();
Log.e(LOG_TAG, "user: " + user.toString());
Intent intent = new Intent(LoginActivity.this, MainActivity.class);
intent.putExtra(Global.EXTRA_USER, user);
startActivity(intent);
} else if (statusCode == 400) {
Toast.makeText(LoginActivity.this, getString(R.string.error_token_required), Toast.LENGTH_SHORT).show();
} else if (statusCode == 403) {
Toast.makeText(LoginActivity.this, getString(R.string.error_invalid_token), Toast.LENGTH_SHORT).show();
}
}
@Override
public void onFailure(Call<User> call, Throwable t) {
dismissProgressDialog();
t.printStackTrace();
Toast.makeText(LoginActivity.this, getString(R.string.error_call_failed), Toast.LENGTH_SHORT).show();
}
};
谢谢您的回答。我设法使用call.enqueue进行异步调用(new Callback <>(){})。我的问题是,如果我想在两个不同的活动中使用相同的回调,最佳做法是什么? – baptisterobert
我想你应该创建一个名为UserCallback的类来实现Callback并在你想要的地方使用它。 – humazed
我曾在一个开源的应用程序,我们如何解决这个问题 请看看 https://github.com/fossasia/open-event-android/blob/master/app%2Fsrc%2Fmain%2Fjava%2Forg %2Ffossasia%2Fopenevent%2Fapi%2Fprocessor%2FEventListResponseProcessor.java – humazed