2012-03-15 11 views
15

मैं UI पर डेटा अपलोड करने के लिए AsyncTask का उपयोग कर रहा हूं। मैंने सर्वर से डेटा को एक अलग तरीके से डाउनलोड करने के लिए कोड लिखा और मैं उस विधि को डिनबैकग्राउंड से कॉल कर रहा हूं। यह त्रुटि देगा क्योंकि UI विधियां doInBackground से नहीं पहुंच सकती हैं। लेकिन, मैं एक्सेस करना चाहता हूं। doinBackground से UI विधि तक पहुंचने के लिए कोई वैकल्पिक प्रक्रिया है?एंड्रॉइड: AsyncTask doInBackground विधि से यूआई थ्रेड पर विधियों को कॉल करना

उत्तर

47

किसी भी वैकल्पिक प्रक्रिया वहाँ doinBackground से यूआई विधि का उपयोग करने की है।?

publishProgress()doInBackground() पर कॉल करें। अपने यूआई-अपडेटिंग लॉजिक को अपने AsyncTask के onProgressUpdate() में रखें। को publishProgress() पर कॉल करने के बाद मुख्य एप्लिकेशन थ्रेड (ए.के.ए., यूआई थ्रेड) पर कॉल किया जाएगा। Here is a sample project इसका प्रदर्शन।

+14

कॉमन्सवेयर नाम पर्याप्त है। +1 –

+0

स्पष्ट उत्तर के लिए +1 –

+0

runOnUiThread() तरीका जानता था लेकिन इस +1 को संभालने के अन्य दृष्टिकोण को पसंद आया। – Deva

7

कॉल runOnUiThread (Runnable कार्रवाई)

more here

+0

हाय मैं doInBackground से runOnUiThread() कॉल कर सकते हैं।? यह काम करेंगे।? या हमेशा की तरह मैं खुद OnCreate से runOnUiThread कॉल कर सकते हैं। यहाँ मैं एक संदेह है। RunOnUiThread यूआई जबकि अवरुद्ध कर देगा डेटा अपलोड कर रहा है। –

+0

जब आप इसे doInBackground() से कॉल करते हैं तो यह समझ में आता है .. या अन्यथा इसका कोई मतलब नहीं है .. – ngesh

+0

आपको रनऑनयूथ्रेड लिखना है जहां आप अपना मुख्य यूआई अपडेट करते हैं। –

1

जैसा कि अन्य ने बताया है, आप runOnUiThread का उपयोग कर सकते हैं। लेकिन, ऐसा लगता है कि आप अपने doInBackground में ऐसा करना चाहते हैं। यदि आप उपयोगकर्ता को प्रगति का संकेत देना चाहते हैं तो आप इसे AsyncTask.onProgressUpdate में संभालना चाहते हैं और अपने doInBackground में प्रकाशित प्रगति को कॉल करना चाहते हैं।

आप यहाँ AsyncTask के बारे में अधिक पढ़ सकते हैं: http://developer.android.com/reference/android/os/AsyncTask.html

-Dan

1

उपयोग doInBackground() सिर्फ कार्यों के लिए:

  1. कुछ समय
  2. संबंधित यूआई नहीं कर रहे हैं ले लो

फिर आपको कार्यान्वित कर सकते हैंAsyncTask.onPostExecute() के लिए AsyncTask

JavaDoc से से मुख्य यूआई धागे पर उन परिणामों को संभालने के लिए कोड को चलाने के लिए:

"doInBackground के बाद यूआई धागे पर चलाता है। ... "

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