2016-04-03 16 views
1

En son Android uygulamasında Retrofit kullanarak Facebook girişini uyguladım.Yinelenen retrofit geri aramadan kaçının

FacebookLoginInfo facebookLoginInfo = new FacebookLoginInfo(token); 
Call<User> call = ApiManager.getService().authenticateFacebookUser(facebookLoginInfo); 
call.enqueue(userCallback); 

FacebookLoginInfo Facebook erişim belirteci ile basit POJO geçerli: SplashActivity ve LoginActivity, benim POST isteği yapmak istiyorum. ApiManager, servisim için singleton sınıfıdır.

Sorunum, userCallback'in SplashActivity ve LoginActivity'de yinelenmesidir. Bu geri bildirimi sadece bir kez tanımlamak için en iyi uygulama var mı? Kullanıcı geri arama


Tanımı:

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(); 
    } 
}; 

cevap

1

Sen Bildirimini uygulayan UserCallback adında bir sınıf oluşturmak ve istediğiniz yere kullanabilirsiniz.

sizin durumunuzda

:

public class UserCallback implements Callback<EventResponseList> { 
@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(); 
    } 
} 

ve bunu kullanmak istediğinizde: Cevabınız için

FacebookLoginInfo facebookLoginInfo = new FacebookLoginInfo(token); 
Call<User> call = ApiManager.getService().authenticateFacebookUser(facebookLoginInfo); 
call.enqueue(new UserCallback()); 
+0

teşekkür ederiz. Call.enqueue (yeni Callback <>() {}) ile eşzamansız çağrımı yapmayı başardım. Benim sorum daha fazla, aynı geri bildirimi iki farklı etkinlikte kullanmak istersek en iyi uygulama hangisidir? – baptisterobert

+0

Geri Bildirimi uygulayan ve istediğiniz yerde kullanmak için UserCallback adlı bir sınıf oluşturmanız gerektiğini düşünüyorum. – humazed

+0

Açık kaynak kodlu bir uygulama üzerinde çalıştım ve bu sorunu nasıl çözdüğümüze bir bakın https://github.com/fossasia/open-event-android/blob/master/app%2Fsrc%2Fmain%2Fjava%2Forg % 2Ffossasia% 2Fopenevent% 2Fapi% 2Fprocessor% 2FEventListResponseProcessor.java – humazed