Отобразить картинки в ListView

237
26 ноября 2016, 19:20

Для загрузки изображения использую:

downloadImage

public static Bitmap downloadImage(String iUrl) {
    Bitmap bitmap = null;
    HttpURLConnection conn = null;
    BufferedInputStream buf_stream = null;
    try {
        Log.v(TAG, "Starting loading image by URL: " + iUrl);
        conn = (HttpURLConnection) new URL(iUrl).openConnection();
        conn.setDoInput(true);
        conn.setRequestProperty("Connection", "Keep-Alive");
        conn.connect();
        buf_stream = new BufferedInputStream(conn.getInputStream(), 8192);
        bitmap = BitmapFactory.decodeStream(buf_stream);
        buf_stream.close();
        conn.disconnect();
        buf_stream = null;
        conn = null;
    } catch (MalformedURLException ex) {
        Log.e(TAG, "Url parsing was failed: " + iUrl);
    } catch (IOException ex) {
        Log.d(TAG, iUrl + " does not exists");
    } catch (OutOfMemoryError e) {
        Log.w(TAG, "Out of memory!!!");
        return null;
    } finally {
        if ( buf_stream != null )
            try { buf_stream.close(); } catch (IOException ex) {}
        if ( conn != null )
            conn.disconnect();
    }
    return bitmap;
}

Для обновления ListView

try{ JSONObject jsonResponse = new JSONObject(response.toString()); JSONArray jsonMainNode = jsonResponse.getJSONArray("items"); //JSONArray Data = jsonResponse.getJSONArray("snippet");

for(int i = 0; i<jsonMainNode.length();i++){
    JSONObject jsonChildNode = jsonMainNode.getJSONObject(i);
    String name = jsonChildNode.optString("kind");
    String number = jsonChildNode.optString("etag");

    JSONObject item = jsonMainNode.getJSONObject(i);
    JSONObject snippet = item.getJSONObject("snippet");
    String title = snippet.getString("title");
    String channelTitle = snippet.getString("channelTitle");
    String pubDate = snippet.getString("publishedAt");
    JSONObject thumbs = snippet.getJSONObject("thumbnails");
    JSONObject thumb = thumbs.getJSONObject("default");
    final String ico = thumb.getString("url");

    new Thread(new Runnable() {
        public void run() {
            bmp = ImageManager.downloadImage(ico);
        }
    }).start();



    countryList.add(createEmployee(title,channelTitle,pubDate, bmp));
}
simpleAdapter.notifyDataSetChanged();

Обновление Listview происходит, но не загружаются именно картинки. Обновление ListView происходит по кнопке

Answer 1

вот тут ты создал новый поток, в котором загрузил картику и она в нем осталась

new Thread(new Runnable() {
                                    public void run() {
                                        bmp = ImageManager.downloadImage(ico);
                                    }
                                }).start();

нужно в downloadImage создать калбек, о том что ты закончил загружать картинку

interface SuccessLoadImg {
   void onSuccesLoad(Bitmap bitmap);
}
    public static Bitmap downloadImage(String iUrl, SuccessLoadImg successLoad) {
    ...
    successLoad.onSuccesLoad(btm);
    ..
}
new Thread(new Runnable() {
     public void run() {
        bmp = ImageManager.downloadImage(ico, new SuccessLoadImg() {
              onSuccesLoad(Bitmap bitmap) {
              countryList.add(createEmployee(title,channelTitle,pubDate, bmp));
              }
        };
     }
}).start();

Но я бы рекомендовал загружать картинки не посредственно в адаптере, через пикассо и быстрее и кода меньше

READ ALSO
Пара координат вывод [закрыто]

Пара координат вывод [закрыто]

Как создать n пар координат (x,y),как реализовать через цикл или по другому?

185
Java jcurses проблема при запуске helloworld :-)

Java jcurses проблема при запуске helloworld :-)

Пытаюсь запустить приложение с использованием jcurses:

376
Switch-on-strings Java7 - архив переписки JSR 334

Switch-on-strings Java7 - архив переписки JSR 334

ЗдравствуйтеМожет ли мне кто-нибудь объяснить небольшой момент в переписки, касательно критики и предложений данного нововведедения switch-on-strings...

237