2
我在這我要檢查身份驗證需要先登錄活動基地活動,既onCreate
和onResume
:中斷super.onCreate()的超類
例如HomeActivity:
public class HomeActivity extends AccountRequiredActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_home);
}
}
public class AccountRequiredActivity extends LifecycleActivity {
private final int INTENT_REQUEST_CODE = 1;
@Inject
ViewModelProvider.Factory viewModelFactory;
private AccountViewModel accountViewModel;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
AndroidInjection.inject(this);
accountViewModel = ViewModelProviders.of(this, viewModelFactory).get(AccountViewModel.class);
checkAuthentication();
}
@Override
protected void onResume() {
super.onResume();
checkAuthentication();
}
private void checkAuthentication() {
// Check if authenticated synchronously
if(!accountViewModel.isAuthenticated()) {
getLogin();
};
}
private void getLogin() {
Intent intent = new Intent(this, LoginActivity.class);
startActivityForResult(intent, INTENT_REQUEST_CODE);
}
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == INTENT_REQUEST_CODE) {
if (resultCode == Activity.RESULT_OK) {
// The login is ok, continue
} else {
getLogin();
}
}
}
}
LoginActivity
是一個單獨的活動,管理登錄流(連接到FB服務器和我自己的)。
此代碼有2個問題。
第一個問題是當isAuthenticated
爲false時,我不希望該方法返回到調用的子Activity(在這種情況下爲HomeActivity
),因爲不應設置Home的setContentView。
第二個問題是,onActivityResult
異步調用(如在LoginActivity
的登錄流程作爲一個事實問題。
如何解決這個代碼,以便我能夠讓基類的身份驗證檢查?,而只有繼續打電話setContentView
當認證成功時
對不起,花了一些時間來驗證它,本週我很忙。但它的作品! – Trace