2

我一直在关注谷歌关于 App Engine 连接的 Android 项目的教程,但我一直卡在这个页面上

特别是在第 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

您正在同时启动两个活动:RegisterActivity和 Google 帐户选择器活动。RegisterActivity以永远不会触发返回您的onActivityResult()函数的方式调用。

所以,你要做的第一件事就是改变这个:

startActivity(intent);

对此:

startActivityForResult(intent, REQUEST_REGISTER);

您必须创建新请求REQUEST_REGISTER

这是因为startActivity()从不触发返回onActivityResult()。只有startActivityForResult()这样做。这正是 Android 的工作方式。

其次,我觉得这两个活动同时启动很奇怪。您必须非常仔细地研究为什么要这样做的逻辑。我强烈怀疑您按顺序启动这两个活动。我不知道应该先去哪一个。

像你已经在做的那样开始第一个(但如果是,onCreate()请确保使用)。startActivityForResult()RegisterActivity

onActivityResult()如果与第一个 Activity 的发送到REQUEST_* requestCode匹配,则启动第二个Activity。requestCodestartActivityForResult()

这可能会解决您的问题,让 Google 帐户选择器、注册和返回到您的活动都正常工作。

于 2013-03-22T21:44:48.950 回答