Передача html из объекта AsyncTask обратно в вызывающую активность - PullRequest
1 голос
/ 09 июня 2011

У меня есть объект деятельности, myAct. myAct создает и вызывает мой объект httpGetter, который расширяет AsyncTask

httpGetter делает отличную работу! Мои индикаторы работают отлично. Он получает данные HTML. Я положил тост в httpGetter.onPostExecute ..... Там есть HTML !!!!

Как передать эти данные обратно в активность из onPostExecute? Я даже не знаю, что гуглить для этого. Я попробовал несколько вещей, и все примеры, которые я видел, либо обновляли textView, либо просто отображали данные в тосте, прямо в onPostExecute. Я хочу возобновить дела обратно в вызывающей деятельности. В моем классе httpGetter я создал метод, чтобы установить дескриптор вызывающей Activity, думая, что мог бы вызвать метод с результатом String. Не повезло.

Ответы [ 4 ]

1 голос
/ 09 июня 2011

ОК, так что немного больше гуглят придумал следующее решение.

myAct нужен интерфейс

   public interface WebServiceListener 
{
    public void onHTTPGetComplete (ArrayList<String> arrayList);
}
public void onHTTPGetComplete  (ArrayList<String> arrayList) {
      String Response = arrayList.get(0);
      Toast worked = Toast.makeText(mainPage.this, Response, Toast.LENGTH_LONG);
      worked.show();
}

и Async в onPostExecute должен был вызвать его

listener.onHTTPGetComplete (myList);

0 голосов
/ 09 июня 2011

Верните обратно пакет из AsyncTask с HTML-кодом в нем. Пример:

@Override
protected Bundle doInBackground(String... params) {

    Bundle b = new Bundle();

    HttpGet get = new HttpGet("myurl");

    HttpResponse response = HttpManager.execute(get);
    HttpEntity entity = response.getEntity();
    String raw_result = EntityUtils.toString(entity);
    entity.consumeContent();

    b.putString(IService.RESULT, raw_result);
    b.putInt(IService.STATUS, IService.STATUS_FINISHED);

    return b;

}


// override this in your activity as an anon inner class
@Override
protected void onPostExecute(Bundle b) {
    int resultCode = b.getInt(IService.STATUS);
}
0 голосов
/ 09 июня 2011

То, как я это сделал, добавило абстрактный метод-потребитель в мою HttpAsyncTask, в который я должен передать данные, возвращенные сервером из onPostExecute. Теперь для вызова операции нужно реализовать метод потребителя, предоставив доступ к данным: -)

0 голосов
/ 09 июня 2011

Как насчет отправки намерения из httpGetter в myAct с помощью intent.putExtra () для передачи ваших данных? Чтобы это работало, вам нужно сообщить httpGetter о контексте myAct при создании AsyncTask.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...