2012-05-25 5 views
9

次のメソッドは、Androidデバイスで呼び出されたときにシステマティックにIOExceptionをスローします(インターネットデバイスが起動している間に電子メールを取得するか、Androidデバイスを使用してGmailに接続できます)。AccountManagerFuture.getResultsが接続を生かしている間にIOExceptionがスローされる

誰でもお手伝いできますか?

private void performAuthentication() { 
    Log.d("GAWidget", "performAuthentication"); 
    GoogleCredential credential = new GoogleCredential(); 
    GoogleAccountManager accountManager = new GoogleAccountManager(this); 
    Log.d("GAWidget", "after getting accountManager"); 
    Account account = accountManager.getAccountByName("[email protected]"); 
    Log.d("GAWidget", "after getting account"+"account.name: "+account.name); 
    accountManager.getAccountManager().getAuthToken(account, "oauth2:https://www.googleapis.com/auth/‌​analytics.readonly", 
      true, new AccountManagerCallback<Bundle>() { 

       public void run(AccountManagerFuture<Bundle> future) { 
        try { 
         String token = future.getResult(15, TimeUnit.SECONDS).getString(AccountManager.KEY_AUTHTOKEN); 
         Log.d("GAWidget", "token: "+token); 
         useToken(token); 
        } catch (OperationCanceledException e) { 
         Log.e("GAWidget", "OperationCanceledException", e); 
        } catch (AuthenticatorException e) { 
         Log.e("GAWidget", "AuthenticatorException", e); 
        } catch (IOException e) { 
         Log.e("GAWidget", "IOException", e); 
        } 
       } 

      }, null); 
} 

編集:

05-27 19:09:04.319: E/GAWidget(12487): IOException 
05-27 19:09:04.319: E/GAWidget(12487): java.io.IOException 
05-27 19:09:04.319: E/GAWidget(12487): at android.accounts.AccountManager.convertErrorToException(AccountManager.java:1440) 
05-27 19:09:04.319: E/GAWidget(12487): at android.accounts.AccountManager.access$400(AccountManager.java:138) 
05-27 19:09:04.319: E/GAWidget(12487): at android.accounts.AccountManager$AmsTask$Response.onError(AccountManager.java:1301) 
05-27 19:09:04.319: E/GAWidget(12487): at android.accounts.IAccountManagerResponse$Stub.onTransact(IAccountManagerResponse.java:69) 
05-27 19:09:04.319: E/GAWidget(12487): at android.os.Binder.execTransact(Binder.java:320) 
05-27 19:09:04.319: E/GAWidget(12487): at dalvik.system.NativeStart.run(Native Method) 

出荷瓶:

google-http-client-1.9.0-beta.jar 
google-http-client-android2-1.9.0-beta.jar (only for SDK >= 2.1) 
google-http-client-android3-1.9.0-beta.jar (only for SDK >= 3.0) 
gson-2.1.jar 
guava-11.0.1.jar 
jackson-core-asl-1.9.4.jar 
jsr305-1.3.9.jar 
protobuf-java-2.2.0.jar 

答えて

7

AccountManagerIOException年代に任意のネットワークエラーを変換している。ここスタックトレースがあります。ネットワークエラーは、予期せぬHTTPステータスのようなものである可能性があります。そのため、ネットワーク接続に直接関係しない可能性があります。 AccountManagerは、「oauth2:」タイプのトークンの一部をサポートしていますが、関連性がある可能性があります。サポートされていることがわかっているトークンを試してください。また、ヒントについてはlogcatを参照してください、そこにいくつかの警告があるかもしれません。これは完全なスタックトレースですか?

これはGN 4.0.4(GoogleAccountManager、それはシステムAccountManagerを使用していないに注意してください)上で動作します:

AccountManager am = AccountManager.get(this); 
    Account[] accounts = accountManager.getAccountsByType("com.google"); 
    String AUTH_TOKEN_TYPE = "oauth2:https://www.googleapis.com/auth/analytics.readonly"; 
    am.getAuthToken(accounts[0], AUTH_TOKEN_TYPE, null, 
        this, new AccountManagerCallback<Bundle>() { 
         public void run(AccountManagerFuture<Bundle> future) { 
          try { 
          String token = 
future.getResult().getString(AccountManager.KEY_AUTHTOKEN); 
          System.out.println("token " + token); 
          } catch (...) {} 

          } 
         }, null); 

編集:ここではあなたのポストからトークンタイプをコピーするとき、私は何を得るのです。

0000000: 226f 6175 7468 323a 6874 7470 733a 2f2f "oauth2:https:// 
0000010: 7777 772e 676f 6f67 6c65 6170 6973 2e63 www.googleapis.c 
0000020: 6f6d 2f61 7574 682f 3f3f 616e 616c 7974 om/auth/??analyt 
0000030: 6963 732e 7265 6164 6f6e 6c79 220a  ics.readonly". 

繰り返しますが、これは私のブラウザやなめらかであるかもしれない、あなたの文字列(特に最後の部分)ところで

+0

をチェックすることで、これは私のギャラクシーネクサス(4.0.4)で正常に動作しますが、いくつかの奇妙な性格を持っているように思われますあなたのトークンタイプで。単にコピー・ペースト・エラーになるかもしれませんが、文字列を再入力して、それがちょうど場合のためにASCIIであることを確認してください。 –

+0

あなたの返事をありがとうNikolay、私はURLの "oauth2:"部分を削除しようとし、私はヌルトークンを取得します。あなたはトークンタイプの奇妙な文字を詳しく教えてください。私はあなたが何を意味するかはわかりません。警告に関して、私はこれにも「GoogleLoginService:ステータス200ですが応答に認証トークンが含まれていません」と表示されます。何か案が? – balteo

+0

また、次の警告が表示されることがあります。 "IInputConnectionWrapper showStatusIcon on Inactive InputConnection" – balteo

関連する問題