2013-03-22 89 views
2

我一直在关注谷歌的教程一个App Engine连接的Android项目,我被陷在this page调用GoogleAccountCredential.newChooseAccountIntent后onActivityResult不叫()

具体在第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

在我看来,这是为什么,因为你开始活动onResultActivity()方法不叫的原因之前,这是注册活动。我相信您需要将此方法凭证= GoogleAccountCredential.usingAudience(this,“server:client_id:”+ WEB_CLIENT_ID); startActivityForResult(credential.newChooseAccountIntent(),REQUEST_ACCOUNT_PICKER);在注册活动中,您使用startActivity(intent)启动它; – 2013-03-22 21:25:45

+0

好吧,谢谢你们指出我在获得凭证之前已经开始了另一项活动。我现在已经对本教程有了洞见。我仍然遇到麻烦,但至少现在调用了onActivityResult方法。 – traw 2013-03-22 21:51:14

+0

您不应该开始一个活动,然后继续在'onCreate'中添加更多代码。你必须想出另一种方式来做'startActivity(意图)' – 2013-03-22 21:51:37

回答

2

您正在启动两项活动:RegisterActivity和谷歌帐户选择同时活动。 RegisterActivity被调用的方式,它将永远不会触发返回到您的onActivityResult()函数。

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

startActivity(intent); 

要这样:

startActivityForResult(intent, REQUEST_REGISTER); 

您必须创建新的请求REQUEST_REGISTER

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

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

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

onActivityResult()启动第二活动如果REQUEST_*requestCode与发送到startActivityForResult()用于第一活动的requestCode相匹配。

这可能会解决你的问题,使双方的谷歌帐户选择,登记,并返回到你的活动才能正常工作。

相关问题