android - 调用 GoogleAccountCredential.newChooseAccountIntent() 后未调用 onActivityResult

标签 android google-app-engine cloud endpoints

我一直在关注 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 控制台的数据存储中没有任何内容。

有人知道这个问题并可能为我指出正确的方向吗?我已经这样做了几个小时,我所能想到的就是其他 Activity 没有设置“resultCode”有问题

非常感谢任何帮助。

最佳答案

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

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

startActivity(intent);

对此:

startActivityForResult(intent, REQUEST_REGISTER);

您必须创建新请求REQUEST_REGISTER

这是因为 startActivity() 永远不会触发返回到 onActivityResult()。只有 startActivityForResult() 可以做到这一点。这就是 Android 的工作方式。

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

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

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

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

关于android - 调用 GoogleAccountCredential.newChooseAccountIntent() 后未调用 onActivityResult,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15579859/

相关文章:

android - 如何将 LiveData<List<Foo>> 转换为 LiveData<List<Bar>>?

android - 使用卫星与 Android 手机进行双向通信

google-app-engine - 迁移 App Engine 使用 Google Cloud Load Balancer 导致约 1 小时的停机时间

python - Google App Engine 中的 key 生成

Android 在用户之间同步数据

html - 使用纯 HTML5/CSS3 创建标签云

android - 在 Android 中写入 SQLite 数据库的推荐设计模式

android - 错误 :Failed to resolve: wearable

java - 尝试获取《纽约时报》页面时,使用 GAE 的 URLFetchService 返回 null

Javascript - 查询 parse.com 的匹配项目