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