Estoy aprendiendo acerca de AsyncTask y quiero usarlo como una clase separada, en lugar de una subclase.Android, ¿puedo poner AsyncTask en una clase separada y tener una devolución de llamada?
Por ejemplo,
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?
}
}
y la principal (UI) de rosca:
inetloader il = new inetloader();
il.execute("http://www.google.com");
//il.onResult()
//{
///do something...
//}
Gracias!
Sí, puede ponerlo en una clase separada, pero la mayoría de las personas no lo hacen porque es purpo por lo general, es mucho más claro si se trata de una clase interna. Si vas a reutilizarlo en muchas actividades, adelante. – keyser
Planeo usarlo para diferentes propósitos, como si lo llamo desde aquí, en el resultado debería hacer eso y eso, si lo llamo desde allí, en el resultado debería hacer algo más ... por lo tanto, si lo voy a mantener en la misma clase y hacer que invoque una función de esa clase en el resultado, tendré que hacer una nueva AsyncTask para cada tipo de acción que tenga que hacer en virtud de ... –
usar interfaz, simplemente implemente su actividad mediante una interfaz y en onPostExcute() de la clase Asyn llame a mContext.implementedMethod(). –