我一直在关注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”的问题
非常感谢任何帮助。
答案 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帐户选择器,注册和返回您的活动正常工作。