2012-05-25 19 views
9

Aşağıdaki yöntem, Android cihazımda çalıştırılırken bir IOException sistemini sistematik olarak atar, oysa İnternet bağlantısı canlıdır (Android cihazımı kullanarak e-postaları alabilir veya gmail'e bağlayabilirim).IOException tarafından aktarılan AccountManagerFuture.getResults oysa bağlantı

Lütfen yardım edebilir misiniz?

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); 
} 

Düzenleme:

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) 

sevk kavanoz:

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 

cevap

7

AccountManagerIOException 's herhangi bir ağ hataları dönüştürmektedir Yığın izidir. Bir ağ hatası beklenmeyen bir HTTP durumu olabilir, bu nedenle doğrudan ağ bağlantısıyla ilgili olmayabilir. AccountManager'un bazı 'oauth2:' tipi belirteçlerini değil, bazılarını desteklediğini unutmayın. Desteklendiği bilinen bir belirteci deneyin. Ayrıca ipuçları için logcat'e bakın, orada bazı uyarılar olabilir. Bu tam yığın izi mi?

Bu GN 4.0.4 (bu sistem AccountManager kullanıyor GoogleAccountManager değil unutmayın) çalışır:

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); 

Düzenleme: İşte Yayınınızdan belirteç türünü kopyalama zaman ne alıyorum:

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". 

Yine, bu benim tarayıcı veya Tavsiyen olabilir, senin dize (özellikle. son bölüm) BTW

+0

kontrol, bu benim Galaxy Nexus (4.0.4) üzerinde çalışıyor, ancak bazı garip karakteri var gibi belirteç türünüzde. Sadece bir kopyala yapıştır hatası olabilir, ancak dizeyi yeniden yazın ve yalnızca durumda olduğu ASCII olduğundan emin olun. –

+0

Cevabınız için teşekkürler Nikolay, url'deki "oauth2:" bölümünü kaldırmaya çalıştım ve boş bir belirteç aldım. Lütfen belirteç tipindeki garip karakterleri detaylandırır mısınız? Ne demek istediğini anlamıyorum. Uyarılarla ilgili olarak şunu da elde ediyorum: "GoogleLoginService: status 200 ancak yanıt auth jetonunu içermedi". Herhangi bir fikir? – balteo

+0

Bazen aşağıdaki uyarıyı da alıyorum: "Etkin olmayan InputConnection üzerinde IInputConnectionWrapper showStatusIcon" – balteo

İlgili konular