【问题标题】:onActivityResult not called after calling GoogleAccountCredential.newChooseAccountIntent()调用 GoogleAccountCredential.newChooseAccountIntent() 后未调用 onActivityResult
【发布时间】:2013-03-22 21:08:37
【问题描述】:

我一直在关注 Google 的有关 App Engine 连接的 Android 项目的教程,但我被困在 this page 上。

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

非常感谢任何帮助。

【问题讨论】:

  • 在我看来,onResultActivity() 方法之所以没有调用,是因为您在它之前启动了活动,即注册活动。我相信你需要把这个方法 credential = GoogleAccountCredential.usingAudience(this,"server:client_id:" + WEB_CLIENT_ID); startActivityForResult(credential.newChooseAccountIntent(), REQUEST_ACCOUNT_PICKER);在注册活动中,您使用此 startActivity(intent);
  • 好的,感谢您向我指出,在我获得凭据之前,我还有另一项活动开始了。我现在对本教程有透视。我仍然遇到问题,但至少现在正在调用 onActivityResult 方法。
  • 您不应该开始一个活动,然后继续在onCreate 中添加更多代码。你必须想办法做startActivity(intent)

标签: android google-app-engine cloud endpoints


【解决方案1】:

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

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

startActivity(intent);

到这里:

startActivityForResult(intent, REQUEST_REGISTER);

您必须创建新请求REQUEST_REGISTER

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-15
    • 2016-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多