Android, могу ли я поместить 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... //} 

Благодаря!

Используйте интерфейс. Что-то вроде:

 interface CallBackListener{ public void callback(); } 

Затем сделайте это в своем потоке пользовательского интерфейса:

 inetloader il = new inetloader(); li.setListener(this); il.execute("http://www.google.com"); 

В inetloader добавьте:

  CallBackListener mListener; public void setListener(CallBackListener listener){ mListener = listener; } 

То в postExecute () выполните:

  mListener.callback(); 

Вы можете передать экземпляр активности функции конструктора и вызова из нее …
Как использовать интерфейс:

 public interface ResultUpdatable { public void setResult(Object obj); } 

Внесите это в Activity и передайте в конструкторе задачи Async и обновите результат onPostExecute с setResult функции setResult .

 inetloader il = new inetloader(); il.execute("http://www.google.com"); String result = il.get();//put it in try-catch ^^^^^^^^ 

here you get result which is in onPostExecute(String result)

Intereting Posts
Osmdroid. OnItemSingleTapUp не работает для пользовательских Drawable Что такое RemoteControlClient в Android 4.0? Изменение значений в массиве не распространяется на приложение Realm findFirst () метод возвращает null Приложение отключается при выборе режима деблокирования, но в режиме отладки работает отлично Как добиться взаимодействия между родными и гибридными приложениями в Worklight? Canvas.drawBitmap () только соблюдает альфа-уровень, когда он равен 0 Android Espresso: у ViewPager нет экземпляра адаптера Как настроить репозитории Git для разработки Android в Eclipse? Соединение Bluetooth RFCOMM не может быть установлено последовательно на Android 4.2 Как вы очищаете ArrayAdapter? В чем разница между commit () и commitAllowingStateLoss () в фрагментах Как EasyEditSpan используется в Android для частичного редактирования текста? Невозможно очистить выбор текста в Webview Android: Как установить сгенерированный заголовок contextMenu?