Результаты AsyncTask в локальную переменную - PullRequest
0 голосов
/ 17 сентября 2011

Я работаю над реализацией API веб-сайта в приложении для Android.Есть часть этого API, которая дает мне массив, который содержит массив URL-адресов изображений.Теперь я могу перебирать массивы просто отлично, и я написал AsyncTask, который преобразует URL-адреса изображений в drawables.Но у меня нет хорошего способа получить эти drawables в ImageView (который я создаю программно в цикле):

void createPhotoPost(JSONObject postData, LinearLayout myPostHolder) {
    try {
        ImageView myImage = new ImageView(myContext);
        JSONArray photosArray = new JSONArray(postData.getString("photos"));
        for(int i = 0; i < photosArray.length(); i++) {
            JSONObject thisPhoto = photosArray.getJSONObject(i);
            JSONArray sizesArray = new JSONArray(thisPhoto.getString("alt_sizes"));
            JSONObject largest = sizesArray.getJSONObject(0);
            new GetPhotoSet(this).execute(largest.getString("url"));
        }
        myPostHolder.addView(myImage);
    } catch (Exception e) {
        e.printStackTrace();
    }
}

Функция, которую я разместил выше, вызывается из другого цикла.Как вы можете видеть в моем коде выше, myImage ImageView должен в конечном итоге содержать рисованный объект, который возвращается вызовом выполнения GetPhotoSet.execute.Есть идеи?Спасибо!

Дополнительные сведения: Поскольку метод, в котором данные возвращаются AsyncTask, находится вне цикла, в котором я объявил ImageView myImage, он не знает, что myImage существует, и не может ссылаться на него.(и, вероятно, к этому моменту существует несколько myImages из разных итераций цикла)

1 Ответ

3 голосов
/ 17 сентября 2011

Ник, для этого onPostExecute().Создайте свой ImageView в onPostExecute() и добавьте его к своему Activity оттуда.Если вы перебираете серию изображений, вы также можете использовать publishProgress() для этого.В вашем примере вы должны переместить весь цикл в doInBackground().

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