0

我正在尝试创建一个从网站(如 9gag)加载照片的简单应用程序。我正在使用 jSoup 和 asyncTask。问题是当我运行应用程序时,它只向我显示图像的 url。我该怎么做才能在 listView 中显示图像而不是 url。XML 问题?帮助 :-/

![屏幕截图] 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> 

提前致谢!

4

3 回答 3

0

I have done something like this:

I have a DB with ID, image URL, image URI

image URI is something like file:////mnt/sdcard/<your package>/images/image1.png

I have a place Holder image for each row and in my Arraylist i have put image URI in Arraylist. then in getView method check if that URI file exists or not if not then send a broadcast to download that image(with ID). In downloader I fetch images with corresponding URL.

How to check URI exists: create a file object with URI and call isExists()

How to send broadcast: create an intent put ID in extras then call sendBroadcast(intent)

Now how to refresh list after image has been download: Send another broadcast from onPostExecute() to refresh list and catch that broadcast in your activity and call list.notifyDatasetChanged().

于 2013-05-01T04:50:58.197 回答
0

您正在将字符串添加到列表中

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

您需要创建custom adapter (用于ListView),它将获取String bla下载图像。

试试这个教程

于 2013-05-03T18:14:33.890 回答
0

此时您只获取 URL。您需要获取实际的位图数据才能显示图像。有两种方法可以做到这一点:

  1. 下载所有图像,然后在获取所有内容后显示列表
  2. 立即使用图像占位符显示列表,根据需要获取图像

一般来说,通过展示你所拥有的东西来快速响应是一种更好的体验(选项#2)。ListView 确实有利于这种模式。在适配器的 getView() 方法中,您将在触发 AsyncTask 以获取位图时显示占位符图像。然后,您将在 onPostExecute 中设置 Image。不幸的是,View 回收让事情变得一团糟。如果用户快速来回滚动,此基本实现将导致在许多情况下显示错误的图像以及完全无响应的设备。

幸运的是,这些都是其他人已经解决的问题。事实上,在 Android 开发者网站上有一套很好的教程和示例代码

于 2013-04-29T17:42:07.157 回答