Ich lerne gerade über AsyncTask und möchte es als separate Klasse verwenden, anstatt eine Unterklasse.Android, kann ich AsyncTask in einer separaten Klasse platzieren und einen Rückruf haben?
Zum Beispiel
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?
}
}
und die Haupt (ui) thread:
inetloader il = new inetloader();
il.execute("http://www.google.com");
//il.onResult()
//{
///do something...
//}
Dank!
Ja, Sie können es in eine separate Klasse legen, aber die meisten Leute nicht, weil es Sinn macht Das ist normalerweise viel klarer, wenn es eine innere Klasse ist. Wenn du es in vielen Aktivitäten wiederverwenden willst, mach weiter. – keyser
Ich plane es für verschiedene Zwecke zu verwenden, wie wenn ich es von hier aus rufe, auf Ergebnis sollte es das tun und das, wenn ich es von dort aus rufe, sollte es etwas anderes machen ... dafür wenn ich es behalte in der gleichen Klasse und habe es eine Funktion von dieser Klasse auf Ergebnis aufrufen, ich muss eine neue AsyncTask für jede Art von Aktion, die es zu tun haben muss machen ... –
Benutzeroberfläche verwenden, implementieren Sie einfach Ihre Aktivität über eine Schnittstelle und in onPostExcute() der Asyn-Klasse mContext.implementedMethod() aufrufen. –