2

App Engine に接続された Android プロジェクトに関する Google のチュートリアルに従っていましたが、このページで行き詰まりました。

具体的には、セクション 8c にエラーがあるようです。タイトルの通り、以下のコードでは onActivityResult メソッドを呼び出していません。

    @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    // Start up RegisterActivity right away
    Intent intent = new Intent(this, RegisterActivity.class);
    startActivity(intent);

    credential = GoogleAccountCredential.usingAudience(this,"server:client_id:" + WEB_CLIENT_ID);
    startActivityForResult(credential.newChooseAccountIntent(), REQUEST_ACCOUNT_PICKER);
    System.out.println("onCreate finished");
    //new EndpointsTask().execute(getApplicationContext());
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {

    super.onActivityResult(requestCode, resultCode, data);

    switch (requestCode) {
    case REQUEST_ACCOUNT_PICKER:
        if (data != null && data.getExtras() != null) {

            accountName = data.getExtras().getString(AccountManager.KEY_ACCOUNT_NAME);
            if (accountName != null) {
                credential.setSelectedAccountName(accountName);
                new EndpointsTask().execute(getApplicationContext());
            }
        }
        break;
    }

AsyncTask が実行されておらず、GAE コンソールのデータストアに何も残っていないことに気付いたこの時点まで、すべてが順調に進んでいました。

誰かがこの問題を認識しており、おそらく私を正しい方向に向けていますか? 私は何時間もこれに取り組んできましたが、「resultCode」を設定していない他のアクティビティに問題があると考えることができます

どんな助けでも大歓迎です。

4

1 に答える 1

2

2 つのアクティビティ:RegisterActivityと Google アカウント選択アクティビティを同時に開始しています。はRegisterActivity、関数へのリターンを決してトリガーしないような方法で呼び出されますonActivityResult()

したがって、最初に行う必要があるのは、これを変更することです。

startActivity(intent);

これに:

startActivityForResult(intent, REQUEST_REGISTER);

新しいリクエストを作成する必要がありますREQUEST_REGISTER

これは、startActivity()トリガーが に戻らないためonActivityResult()です。それだけstartActivityForResult()です。これはまさに Android の仕組みです。

次に、両方のアクティビティが同時に開始されるのは奇妙だと思います。これが行われている理由の論理を非常に詳しく調べる必要があります。あなたは 2 つのアクティビティを順番に開始したいと強く思っています。どちらを先に行けばいいのかわからない。

すでに行っているように、最初のものを開始します(ただし、そうである場合はonCreate()必ず使用してください)。startActivityForResult()RegisterActivity

が最初のアクティビティの送信先と一致するonActivityResult()場合は、2 番目のアクティビティを開始します。REQUEST_* requestCoderequestCodestartActivityForResult()

これにより、問題が解決し、Google Account Chooser、登録、およびアクティビティに戻ることが正しく機能する可能性があります。

于 2013-03-22T21:44:48.950 に答える