Tôi chỉ đang học về AsyncTask và muốn sử dụng nó như là một lớp riêng biệt, thay vì sau đó là một lớp con.Android, tôi có thể đặt AsyncTask trong một lớp riêng biệt và có gọi lại không?
Ví dụ,
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?
}
}
và chính (ui) chủ đề:
inetloader il = new inetloader();
il.execute("http://www.google.com");
//il.onResult()
//{
///do something...
//}
Cảm ơn!
Có, bạn có thể đặt nó trong một lớp học riêng biệt, nhưng hầu hết mọi người không vì nó purpo se thường rõ ràng hơn nếu đó là một lớp bên trong. Nếu bạn định sử dụng lại nó trong nhiều hoạt động, hãy tiếp tục. – keyser
Tôi dự định sử dụng nó cho các mục đích khác nhau, như nếu tôi gọi nó từ đây, kết quả là nó nên làm điều đó và nếu tôi gọi nó từ đó, kết quả là nó nên làm gì đó khác ... nếu tôi sẽ giữ nó trong cùng một lớp và có nó gọi một hàm từ lớp đó trên kết quả, tôi sẽ phải tạo một AsyncTask mới cho mọi loại hành động mà nó phải làm onresult ... –
giao diện sử dụng, chỉ cần triển khai hoạt động của bạn bằng một giao diện và trong onPostExcute() của lớp Asyn gọi mContext.implementedMethod(). –