在列表视图中将图像从JSON URl加载到ImageView

时间:2014-04-23 09:28:06

标签: java android json lazy-loading

我正在尝试获取一个返回URL的JSON,然后我想在ImageView ListView之前将该网址图片加载到我的ArrayList。我想通过AsyncTask延迟加载图片,这样如果它没有加载就不会影响我的ListView,而且,如果图像不可用,我想从drawable设置一个图像。这是JSON Data。在这里,有一个名为海报的对象,其中有一个名为 orignal 的对象。我希望将此原始海报加载到此布局中名为poster的图像视图中。

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:background="@drawable/list_selector"
    android:orientation="horizontal"
    android:padding="5dip" >

    <!-- ListRow Left side Thumbnail image -->

    <LinearLayout
        android:id="@+id/thumbnail"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_marginRight="5dip"
        android:padding="3dip" >

        <ImageView
            android:id="@+id/list_image"
            android:layout_width="60dip"
            android:layout_height="60dip"
            android:contentDescription="@string/app_name"
            android:src="@drawable/poster" />
    </LinearLayout>
    <!-- Rightend Arrow -->

    <ImageView
        android:id="@+id/imageView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_centerVertical="true"
        android:contentDescription="@string/app_name"
        android:src="@drawable/arrow" />
    <!-- City -->

    <TextView
        android:id="@+id/namelisttext"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_toRightOf="@id/list_image"
        android:layout_marginLeft="75dip"
        android:gravity="top"
        android:paddingBottom="10dip"
        android:text="Movie Name"
        android:textColor="#040404"
        android:textSize="25sp"
        android:textStyle="bold"
        android:typeface="sans" />
    <!-- Weather Information -->

    <ImageView
        android:id="@+id/rtscore"
        android:layout_width="18dip"
        android:layout_height="18dip"
        android:layout_alignLeft="@id/namelisttext"
        android:layout_below="@id/namelisttext"
        android:contentDescription="@string/app_name"
        android:src="@drawable/rtscore" />

    <TextView
        android:id="@+id/rtscoretext"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="2dp"
        android:layout_toRightOf="@+id/rtscore"
        android:layout_alignTop="@id/rtscore"
        android:text="Score"
        android:textColor="#343434"
        android:textSize="15sp" />

    <ImageView
        android:id="@+id/audscore"
        android:layout_width="18dip"
        android:layout_height="18dip"
        android:layout_below="@id/namelisttext"
        android:layout_toRightOf="@id/rtscoretext"
        android:layout_marginLeft="7dp"
        android:contentDescription="@string/app_name"
        android:src="@drawable/audscore" />

    <TextView
        android:id="@+id/audscoretext"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="2dp"
        android:layout_toRightOf="@+id/audscore"
        android:layout_alignTop="@id/audscore"
        android:text="Score"
        android:textColor="#343434"
        android:textSize="15sp" />

    <TextView
        android:id="@+id/castlisttext"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@id/namelisttext"
        android:layout_below="@id/rtscore"
        android:layout_toLeftOf="@+id/releaseyearlisttext"
        android:paddingRight="5dp"
        android:paddingTop="5dp"
        android:singleLine="true"
        android:text="Casts"
        android:textColor="#343434"
        android:textSize="15sp" />

    <TextView
        android:id="@+id/releaseyearlisttext"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_below="@+id/rtscore"
        android:layout_marginRight="7dp"
        android:paddingTop="5dip"
        android:text="Year"
        android:textColor="#343434"
        android:textSize="15sp" />

</RelativeLayout>

请帮助我如何在ArrayList中输入此网址,然后在ListView中延迟加载图片。

2 个答案:

答案 0 :(得分:0)

你应该在android中使用延迟加载的概念。

首先,您需要解析JSON响应并获取原始密钥网址并设置为arraylist。

查看Lazyloading of images in ListView,它将从网址加载图片并显示在列表中。

解析您的JSON响应如下:

JSONObject jObj=new JSONObject("<response>");
JSONArray jArray=jObj.getJSONArray("movies");
 ArrayList<String> urlList=new ArrayList<String>();

for(int i=0;i<jArray.lenght();i++)
{
      JSONObject jo_inside = ja.getJSONObject(i);

       String originalUrl=jo_inside.getJSONObject("posters").get("original").toString();
        urlList.add(originalUrl);
}

答案 1 :(得分:0)

真正简化您正在寻找的内容的一种方法是使用Google自己提供的网络库&#34; volley&#34;。 看一下下面的视频,他们讨论了图书馆的几个功能。 https://developers.google.com/events/io/sessions/325304728

该库为您处理大量样板代码,并以异步方式完成所有工作。您应该只能获取json数据,获取原始海报网址,然后将该网址设置为图像的来源。然后,Volley会自动并异步加载该图像。