android - खाता प्रबंधक अवरुद्धगेटअथटोक अटक जाता है




sync accountmanager (2)

मैं SampleSyncAdapter का उपयोग अपने स्वयं के SyncAdapter बनाने के लिए आधार के रूप में कर रहा हूँ ऐसा लगता है कि एक नया खाता जोड़ने के लिए अच्छी तरह से काम करना है, लेकिन एक बार जब मैं AccountManager के साथ authtoken प्राप्त करना चाहता हूँ। अवरोधन गेट AUTHToken (... यह अटक जाता है और फिर कुछ मिनटों के बाद ऑपरेशन कनॅक्लेटेड एक्सपेशेंस फेंकता है।

क्या किसी के पास एक गलत विचार है जो यहां गलत हो सकता है? कोड लगभग नमूना के समान है, सिवाय इसके कि मैं अपने खुद के सर्वर की पुष्टि कर रहा हूं।

05-24 23: 00: 23.258: एरर / सिंकएडैप्टर (4961): ऑपरेशन कैंक्लेटेड एक्सेप्शन 05-24 23: 00: 23.258: एरर / सिंकएडैप्टर (4961): एंड्रॉइड। अकाउंट .ऑपरेशन कैंक्लेटेड एक्सपेशन्शन 05-24 23: 00: 23.258: एरर / सिंकएडैप्टर (4961): एंड्रॉइड पर। खाता। खाता प्रबंधक $ एम्सटैस्क.इनएन्टीगेटरिसल्ट (अकाउंट मैनेजर। जावा 201125) 05-24 23: 00: 23.258: एरर / सिंकएडैप्टर (4 9 61): एंड्रॉइड पर। अकाउंट। खाता प्रबंधक $ एएमएसटस्क.जेट रिज़ल्ट (अकाउंट मैनेजर। java: 1260) 05-24 23: 00: 23.258: त्रुटि / समन्वयन एडेप्टर (4961): एंड्रॉइड पर। अकाउंट। खाता प्रबंधक $ एम्सटस्क.जेट रिजल्ट (अकाउंट मैनेजर। जावा 181) 05-24 23: 00: 23.258: त्रुटि / समन्वयन एडेप्टर ( 4961): एंड्रॉइड पर। Accounts.AccountManager.blockingGetAuthToken (AccountManager.java:737)


getAuthToken पद्धति एक सहायक है जो getAuthToken synchronously कॉल getAuthToken

यदि आप auth टोकन को पुनर्प्राप्त करने के लिए नेटवर्क तक पहुंच रहे हैं, तो अनुरोध सफल होने तक आपको अवरुद्ध कर दिया जाएगा। आपको यह देखना चाहिए कि आप अपने अनुप्रयोग के भीतर से नेटवर्क संसाधन को ठीक से एक्सेस कर सकते हैं।


मूल विधि विधि getAuthToken को कॉल करने के बजाय authtoken पाने का एक सुविधाजनक तरीका है को मेथड रन ओनयूआईथ्रेड को कॉल करके मुख्यथ्रेड में नहीं होना चाहिए। या आप डिफ़ॉल्ट विधि getAuthToken कॉल कर सकते हैं और अगली अनुदेश निष्पादित करने के लिए कॉलबैक का उपयोग कर सकते हैं। उदाहरण के लिए

final AccountManagerFuture<Bundle> future = mAccountManager.getAuthToken(account, AccountConfig.AUTHTOKEN_TYPE, null, this, null, null);
    new Thread(new Runnable() {
        @Override
        public void run() {
            try {

                Bundle bnd = future.getResult();
                final String authtoken = bnd.getString(AccountManager.KEY_AUTHTOKEN); 
                if (authtoken == null) { 
                    return;
                }
                 // this callback interface method 
                logoutCallback.onLogoutFinished(authtoken);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }).start();




auth-token