2013-04-29 1 views
0

Я пытаюсь создать простую программу, загружающую фотографии с веб-сайта (например, 9gag). Я использую jSoup и asyncTask. Проблема в том, что когда я запускаю приложение, он показывает мне только URL-адреса изображений. Что я могу сделать, чтобы отобразить изображение в спискеView, а не URL-адресах. XML Prob? Помощь: -/Показывать Urls вместо изображений Приложение для Android

[Screen Shot] https://www.dropbox.com/s/moybisjrbdgzjre/Screenshot_2013-04-29-20-09-13.png

вот мой LoadImages класс:

public LoadImages(ArrayList list, ArrayAdapter adapter) 
{ 

    this.list = list; 
    this.adapter = adapter; 
} 

@Override 
protected Elements doInBackground(String... params) { 
    org.jsoup.nodes.Document doc = null; 
     try 
     { 
      doc =Jsoup.connect("http://mongol.co.il/").get(); 
      return doc.select("img"); 

     } 
     catch (IOException e1) 
     { 
      e1.printStackTrace(); 
     } 
    return null; 
} 

@Override 
protected void onPostExecute(Elements result) { 
    super.onPostExecute(result); 
    int flag=0; 
    //Bitmap bitmap = null; 
    for (org.jsoup.nodes.Element div : result) 
    { 
     String bla = div.absUrl("src"); 
     list.add(bla); 
     flag++; 
     if(flag==3) 
     break; 

    } 
    adapter.notifyDataSetChanged(); 

} 

Вот и мой XML-файл:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"> 
<ListView 
    android:id="@+id/listview" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" > 

</ListView> 

</LinearLayout> 

Заранее спасибо!

ответ

0

Вы только выбираете URL-адреса на этом этапе. Чтобы показывать изображения, вам нужно получить фактические данные битмапа. Есть два способа сделать это:

  1. Скачать все изображения, а затем показать список после того, как все забирается
  2. Показать список сразу с заполнителями изображения, выборки изображения, как они необходимы

В целом, лучше всего быстро реагировать, показывая, что у вас есть, как вы его получите (вариант № 2). ListView действительно способствует этой модели. В методе getView() адаптера вы покажете изображение заполнителя при отключении AsyncTask, чтобы получить растровое изображение. Затем вы установите изображение в onPostExecute. К сожалению, все становится беспорядочным с View recycling. Эта базовая реализация приведет к тому, что во многих случаях будет отображаться неправильное изображение и полностью не отвечает на запросы, если пользователь быстро прокручивается вперед и назад.

К счастью, это проблемы, которые другие решили. Фактически, есть отличный набор tutorials along with sample code on Android Developer website.

0

я сделал что-то вроде этого:

У меня есть DB с ID, image URL, image URI

image URI является чем-то вроде file:////mnt/sdcard/<your package>/images/image1.png

У меня есть место держатель изображения для каждой строки и в моем Arraylist Я положил image URI в Arraylist. затем в методе getView проверьте, существует ли это URI file или нет, а затем отправить широковещательную рассылку для загрузки этого изображения (с идентификатором). В загрузчике я получаю изображения с соответствующим URL-адресом.

Как проверить URI существует: создать объект файла с URI и вызвать isExists()

Как отправить радиопередачу: создать intent поставил ID в extras затем вызвать sendBroadcast(intent)

Теперь, как обновить список после того, как было загружено изображение: Отправить еще broadcast от onPostExecute(), чтобы обновить список и поймать его broadcast в летнее время. ur activity и позвоните по телефону list.notifyDatasetChanged().

0

Вы добавляете строку в список

String bla = div.absUrl("src"); 
list.add(bla); 

Вам нужно создать custom adapter (для ListView), который будет принимать что String bla и скачать изображение.

Попробуйте следующее tutorial

Смежные вопросы