は、私は、ログインする必要がすべての活動のためにonCreate
とonResume
の両方を認証をチェックしたいベース活性を有する割り込みsuper.onCreate()
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の場合、ホームのsetContentViewが設定されていないため、このメソッドが呼び出し元の子アクティビティ(この場合はHomeActivity
)に戻ることは望ましくありません。
第二の問題は、実際の問題としてLoginActivity
でログイン流れがあるようonActivityResult
は(非同期的に呼び出されることである。
私は、基本クラスでの認証チェックを行うことができるよように私はこのコードを修正するにはどうすればよいです?オーバーライドから法に派生活動をfinal
防止を宣言
@Override
protected final void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Do your authentication stuff here
if (auth is successfull) {
// Call derived Activity's "doOnCreate()" to set content view, etc.
doOnCreate(savedInstanceState);
} else {
// Here you can do whatever you need to do in case the auth fails
}
}
:のみ認証が成功したときのベースに
申し訳ありませんが、確認に時間がかかりました。今週はとても忙しかったです。しかし、それは動作します! – Trace