2013-03-22 50 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相匹配。

這可能會解決你的問題,使雙方的谷歌帳戶選擇,登記,並返回到你的活動才能正常工作。