저는 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?
}
}
주 (UI) 스레드 :
inetloader il = new inetloader();
il.execute("http://www.google.com");
//il.onResult()
//{
///do something...
//}
감사합니다!
예, 별도의 클래스에 넣을 수 있지만 대부분의 사람들은 그 purpo se는 대개 내부 클래스 인 경우 더 명확합니다. 당신이 많은 활동에서 그것을 재사용 할 것이라면, 계속하십시오. – keyser
다른 용도로 사용하고 싶습니다. 여기에서 전화를 걸면 결과에서 그걸해야합니다. 그곳에서 전화를 걸면 결과에 다른 것을해야합니다 ... 그럴 경우 계속 해두십시오. 동일한 클래스에서 결과에 대해 해당 클래스의 함수를 호출해야합니다. 결과에 따라 수행해야하는 모든 종류의 작업에 대해 새 AsyncTask를 만들어야합니다. –
인터페이스를 사용하여 인터페이스를 사용하면됩니다. Asyn 클래스의 onPostExcute()에서 mContext.implementedMethod()를 호출합니다. –