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

时间:2013-03-22 21:08:37

标签: 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控制台的数据存储区中没有任何结果。

是否有人意识到这个问题并且可能指出我正确的方向?我已经在这几个小时了,而我能想到的是其他活动没有设置“resultCode”的问题

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:2)

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

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

startActivity(intent);

对此:

startActivityForResult(intent, REQUEST_REGISTER);

您必须创建新请求REQUEST_REGISTER

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

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

开始onCreate()中的第一个(如果它是startActivityForResult(),请务必使用RegisterActivity。)

如果onActivityResult() REQUEST_*与第一个活动发送给requestCode的{​​{1}}匹配,则在requestCode开始第二个活动。

这可以解决您的问题,允许Google帐户选择器,注册和返回您的活动正常工作。