android - OnyncTask और सेट एडाप्टर ऑन क्रेट विधियों में




android-asynctask android-sdk-2.1 (2)

मैं कुछ भारी नेटवर्क कार्य कर रहा हूं - चित्र डाउनलोड करना (पूर्वावलोकन) - मेरे मुख्य यूआई को अवरुद्ध नहीं किए जाने के लिए ऐसा किया गया था कि एक एसिंकटस्क में, मैं उन्हें ग्रिडव्वेज में रखना चाहता हूं लेकिन मैं एसिडेक सेट अप करने से पहले एसिडेक सेट करता हूं। कुछ कोड अधिक उपयोगी होगा

    public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.gridview);
            new LoadAllPictures().execute();
            GridView g = (GridView) findViewById(R.id.gridview);
            g.setAdapter(new ImageAdapter(this));
}

तो अंत में Logcat से पता चलता है कि सब कुछ डाऊलोड किया गया था लेकिन मेरी स्क्रीन पर कुछ भी नहीं। मैंने अपने एसिंकटस्क में सेट एडेप्टर भाग करने की कोशिश की लेकिन मुझे यह बताता है कि: Only the original thread that created a view hierarchy can touch its views.

मुझे क्या करना चाहिए ?


AsyncTask में 3 बुनियादी तरीकों हैं:

protected void onPreExecute()
{
}

protected void onPostExecute(Void unused)   
{
  // displaying images
  // set adapter for listview with downloaded items
}

protected Void doInBackground(Void... params) 
{
     // downloading and time consuming task 
}

ताकि आप g.setAdapter(new ImageAdapter(this)); लिख सकते हैं g.setAdapter(new ImageAdapter(this)); onPostExecute(Void unused) विधि के अंदर क्योंकि इस समय, चित्र पहले से ही doInBackground() विधि के अंदर डाउनलोड किए गए हैं।


AsyncTask में एक उपयोगी विधि है जिसे आप नाम पर कार्यान्वित कर सकते हैं onPostExecute() । कार्य पूरा होने के बाद इसे मूल UI थ्रेड से कहा जाता है। आप इसे सही धागा से एडाप्टर सेट करने के लिए उपयोग कर सकते हैं।





android-gridview