Ich habe Facebook-Login mit Retrofit in meiner neuesten Android-Anwendung implementiert. In SplashActivity und LoginActivity möchte ich meine POST-Anfrage machen:Doppelte Nachrüstung vermeiden Callback
FacebookLoginInfo facebookLoginInfo = new FacebookLoginInfo(token);
Call<User> call = ApiManager.getService().authenticateFacebookUser(facebookLoginInfo);
call.enqueue(userCallback);
FacebookLoginInfo ist eine einfache POJO mit dem Zugriffstoken Facebook. ApiManager ist eine Singleton-Klasse für meinen Dienst.
Mein Problem ist, dass userCallback in SplashActivity und LoginActivity dupliziert ist. Gibt es eine bewährte Vorgehensweise, um diesen Rückruf nur einmal zu definieren?
Definition des Benutzers Rückruf:
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();
}
};
Vielen Dank für Ihre Antwort. Ich schaffte es, meinen asynchronen Anruf mit call.enqueue (neuer Rückruf <>() {}) zu machen. Meine Frage ist mehr, was ist die beste Vorgehensweise, wenn ich den gleichen Rückruf in zwei verschiedenen Aktivitäten verwenden möchte? – baptisterobert
Ich denke, Sie sollten eine Klasse namens UserCallback erstellen, die Callback implementiert und verwenden, wo Sie möchten. – humazed
Ich arbeitete an einer Open-Source-App und wie wir dieses Problem lösen Bitte werfen Sie einen Blick https://github.com/fossasia/open-event-android/blob/master/app%2Fsrc%2Fmain%2Fjava%2Forg % 2Ffossasia% 2Fopenevent% 2Fapi% 2Fprocessor% 2FEventListResponseProcessor.java – humazed