2012-05-25 17 views
9

निम्न विधि व्यवस्थित रूप से आईओएक्सप्शन को मेरे एंड्रॉइड डिवाइस पर लगाए जाने पर व्यवस्थित रूप से फेंकता है जबकि इंटरनेट कनेक्शन जिंदा है (मैं ईमेल पुनर्प्राप्त कर सकता हूं या अपने एंड्रॉइड डिवाइस का उपयोग कर जीमेल से कनेक्ट कर सकता हूं)।IMException AccountManagerFuture.getResults द्वारा फेंक दिया गया है जबकि कनेक्शन जिंदा है

क्या कोई मदद कर सकता है?

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:' टाइप टोकन नहीं, ताकि इससे संबंधित हो। एक टोकन के साथ प्रयास करें जिसे समर्थित होने के लिए जाना जाता है। संकेतों के लिए लॉगकैट को भी देखें, वहां कुछ चेतावनियां हो सकती हैं। क्या यह पूरा स्टैक ट्रेस है?

यह एक GN 4.0.4 (यह प्रणाली AccountManager उपयोग कर रहा है ध्यान दें, नहीं GoogleAccountManager) पर काम करता है:

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

फिर, यह अपने ब्राउज़र या बराबर हो सकता है, अपने स्ट्रिंग (esp। अंतिम भाग)

+0

BTW जाँच से, यह मेरा गैलेक्सी नेक्सस (4.0.4) पर ठीक काम करता है, लेकिन आप कुछ अजीब चरित्र है लगता है आपके टोकन प्रकार में है। सिर्फ एक कॉपी-पेस्ट त्रुटि हो सकती है, लेकिन स्ट्रिंग को दोबारा टाइप करें और सुनिश्चित करें कि यह केवल मामले में ASCII है। –

+0

आपके उत्तर निकोले के लिए धन्यवाद, मैंने यूआरएल में "oauth2:" भाग को हटाने की कोशिश की और मुझे एक शून्य टोकन मिलता है। क्या आप टोकन प्रकार में अजीब पात्रों पर विस्तृत जानकारी दे सकते हैं? मैं नहीं देखता कि आपका क्या मतलब है। चेतावनियों के बारे में मुझे यह भी मिलता है: "GoogleLoginService: स्थिति 200 लेकिन प्रतिक्रिया में ऑथ टोकन शामिल नहीं था"। कोई उपाय? – balteo

+0

मुझे कभी-कभी निम्न चेतावनी भी मिलती है: "निष्क्रिय इनपुट कनेक्शन पर IInputConnectionWrapper showStatusIcon" – balteo

संबंधित मुद्दे