Я внедрил вход в Facebook, используя Модернизацию в своем последнем приложении для Android. В 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();
}
};
Спасибо за ваш ответ. Мне удалось сделать мой асинхронный вызов с вызовом.enqueue (new Callback <>() {}). Мой вопрос больше, что лучше всего, если я хочу использовать один и тот же обратный вызов в двух разных действиях? – baptisterobert
Я думаю, вам следует создать класс UserCallback, который реализует Callback и использовать его там, где вы хотите. – humazed
Я работал над приложением с открытым исходным кодом и как мы решаем эту проблему , пожалуйста, посмотрите https://github.com/fossasia/open-event-android/blob/master/app%2Fsrc%2Fmain%2Fjava%2Forg % 2Ffossasia% 2Fopenevent% 2Fapi% 2Fпроцессор% 2FEventListResponseProcessor.java – humazed