मैं बस AsyncTask के बारे में सीख रहा हूं और इसे एक अलग वर्ग के रूप में उपयोग करना चाहता हूं, बल्कि एक सबक्लास।एंड्रॉइड, क्या मैं AsyncTask को एक अलग वर्ग में रख सकता हूं और कॉलबैक कर सकता हूं?
उदाहरण के लिए,
class inetloader extends AsyncTask<String, Void, String> {
@Override
protected String doInBackground(String... urls) {
String response = "";
DefaultHttpClient client = new DefaultHttpClient();
HttpGet httpGet = new HttpGet(urls[0]);
try {
HttpResponse execute = client.execute(httpGet);
InputStream content = execute.getEntity().getContent();
BufferedReader buffer = new BufferedReader(
new InputStreamReader(content));
String s = "";
while ((s = buffer.readLine()) != null) {
response += s;
}
} catch (Exception e) {
e.printStackTrace();
}
return response;
}
@Override
protected void onPostExecute(String result) {
Log.e("xx",result);
// how do I pass this result back to the thread, that created me?
}
}
और मुख्य (यूआई) धागा:
inetloader il = new inetloader();
il.execute("http://www.google.com");
//il.onResult()
//{
///do something...
//}
धन्यवाद!
हां आप इसे एक अलग वर्ग में डाल सकते हैं, लेकिन ज्यादातर लोग ऐसा नहीं करते क्योंकि इसकी purpo यदि यह एक आंतरिक वर्ग है तो आमतौर पर बहुत अधिक स्पष्ट होता है। यदि आप इसे कई गतिविधियों में पुन: उपयोग करने जा रहे हैं, तो आगे बढ़ें। – keyser
मैं इसे विभिन्न प्रयोजनों के लिए उपयोग करने की योजना बना रहा हूं, जैसे कि मैं इसे यहां से कॉल करता हूं, नतीजतन इसे ऐसा करना चाहिए और यदि मैं इसे वहां से बुलाता हूं, तो परिणामस्वरूप इसे कुछ और करना चाहिए ... अगर मैं इसे रखूंगा उसी कक्षा में और इसे परिणामस्वरूप उस वर्ग से एक फ़ंक्शन कॉल किया गया है, मुझे हर तरह की कार्रवाई के लिए एक नया AsyncTask बनाना होगा जिसे इसे ऑनर्सल्ट करना है ... –
इंटरफ़ेस का उपयोग करें, बस इंटरफ़ेस द्वारा अपनी गतिविधि को लागू करें और Asyn क्लास कॉल पर postExcute() में mContext.implementedMethod() कॉल करें। –