listview展示网络新闻类条目包括图片

首先根据json类型去封装bean

package com.yinyulong.bean;

import java.util.List;

/**
 * Created by Alongstorm on 2017/8/7,0007.
 */
public class InfoBean {
    private int status;
    private String info;
    private List<DataBean> data;

    public int getStatus() {
        return status;
    }

    public void setStatus(int status) {
        this.status = status;
    }

    public String getInfo() {
        return info;
    }

    public void setInfo(String info) {
        this.info = info;
    }

    public List<DataBean> getData() {
        return data;
    }

    public void setData(List<DataBean> data) {
        this.data = data;
    }

    @Override
    public String toString() {
        return "InfoBean{" +
                "status=" + status +
                ", info='" + info + '\'' +
                ", data=" + data +
                '}';
    }

    public static class DataBean {
        /**
         * news_id : 13811
         * news_title : 深港澳台千里连线,嘉年华会今夏入川
         * news_summary : 617—20日,“2016成都深港澳台嘉年华会”(简称嘉年华会)将在成都世纪城国际会展中心举办。其主办方励展华博借力旗
         * pic_url : http://f.expoon.com/sub/news/2016/01/21/887844_230x162_0.jpg
         */

        private String news_id;
        private String news_title;
        private String news_summary;
        private String pic_url;

        public String getNews_id() {
            return news_id;
        }

        public void setNews_id(String news_id) {
            this.news_id = news_id;
        }

        public String getNews_title() {
            return news_title;
        }

        public void setNews_title(String news_title) {
            this.news_title = news_title;
        }

        public String getNews_summary() {
            return news_summary;
        }

        public void setNews_summary(String news_summary) {
            this.news_summary = news_summary;
        }

        public String getPic_url() {
            return pic_url;
        }

        public void setPic_url(String pic_url) {
            this.pic_url = pic_url;
        }

        @Override
        public String toString() {
            return "DataBean{" +
                    "news_id='" + news_id + '\'' +
                    ", news_title='" + news_title + '\'' +
                    ", news_summary='" + news_summary + '\'' +
                    ", pic_url='" + pic_url + '\'' +
                    '}';
        }
    }
} 
下边这个布局就不解释了

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.bwie.yinyulong.OtherActivity">
    <ListView
        android:id="@+id/lv"
        android:layout_width="match_parent"
        android:layout_height="match_parent"></ListView>

</RelativeLayout>
然后是list条目item的布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:orientation="horizontal"
    android:layout_height="match_parent">
    <ImageView
        android:id="@+id/iv_pic"
        android:src="@mipmap/ic_launcher"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
    <TextView
        android:id="@+id/tv_title"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

</LinearLayout>
下边是解析的方法 这里要导入谷歌第三方Gson的jar包

然后添加到library里

package com.yinyulong;

import android.content.ContentValues;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.drawable.Drawable;
import android.net.Uri;
import android.os.AsyncTask;
import android.os.Handler;
import android.os.Message;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;

import com.yinyulong.bean.InfoBean;
import com.google.gson.Gson;

import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;

public class OtherActivity extends AppCompatActivity {

    List<InfoBean.DataBean> datas;
    ListView lv;
    Myadapter adapter;
    int code;
    Handler handler;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_other);
        lv= (ListView) findViewById(R.id.lv);
        datas=new ArrayList<InfoBean.DataBean>();
        new AsyncTask<String,String,String>(){
            @Override
            protected String doInBackground(String... strings) {
                String res=initData();

                return res;
            }

            @Override
            protected void onPostExecute(String s) {
                Gson gson=new Gson();
                InfoBean info=gson.fromJson(s,InfoBean.class);
                datas=info.getData();

                adapter=new Myadapter();
                lv.setAdapter(adapter);

                super.onPostExecute(s);
            }
        }.execute("");

    }

    class Myadapter extends BaseAdapter{

        @Override
        public int getCount() {
            return datas.size();
        }

        @Override
        public Object getItem(int i) {
            return null;
        }

        @Override
        public long getItemId(int i) {
            return 0;
        }

        @Override
        public View getView(int i, View view, ViewGroup viewGroup) {
            final ViewHolder holder;
            if (view==null){
                view=View.inflate(OtherActivity.this,R.layout.list_item,null);
                holder=new ViewHolder();
                holder.tv_title=(TextView) view.findViewById(R.id.tv_title);
                holder.iv_pic=(ImageView) view.findViewById(R.id.iv_pic);
                view.setTag(holder);
            }else{
                holder= (ViewHolder) view.getTag();
            }

            holder.tv_title.setText(datas.get(i).getNews_title());
            final String ss=datas.get(i).getPic_url();

            //主线程不能做耗时操作 所以要new一个子线程
            new Thread(new Runnable() {
                @Override
                public void run() {
                    //定义一个bitmap去得到网络上加载的图片资源
                    Bitmap bitmap = getHttpBitmap(ss);
                    Message message=new Message();
                    message.what=0;
                    //绑定在message上发送给handler
                    message.obj=bitmap;
                    //biu 发送
                    handler.sendMessage(message);
                }
            }).start();
            Log.i("/*+*+/+/+*/*+/-*+/-*/-*+/+-/-+/*-/+*", "getView: "+ss);

            //使用handler能更新UI
            handler=new Handler(){
                @Override
                public void handleMessage(Message msg) {
                    holder.iv_pic.setImageBitmap((Bitmap) msg.obj);
                    super.handleMessage(msg);
                }
            };

            return view;
        }
    }

    //这个方法传入图片路径 返回一个bitmap对象
    public static Bitmap getHttpBitmap(String ss) {
        URL myFileURL;
        Bitmap bitmap=null;
        try {
            myFileURL=new URL(ss);
            HttpURLConnection conn= (HttpURLConnection) myFileURL.openConnection();
            conn.setConnectTimeout(5000);
            //想要传流开启一个方法
            conn.setDoInput(true);
            conn.setUseCaches(false);

            //conn得到流
            InputStream is=conn.getInputStream();
            //使用工厂类把流转换为bitmap对象
            bitmap= BitmapFactory.decodeStream(is);
            //关闭流
            is.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return bitmap;
    }

    static class ViewHolder{
        //listview进行优化使用
        TextView tv_title;
        ImageView iv_pic;
    }

    public String initData() {
        String result="";
        String path="http://api.expoon.com/AppNews/getNewsList/type/1/p/";
        try {
            URL url=new URL(path);
            HttpURLConnection conn= (HttpURLConnection) url.openConnection();
            //设置请求时间和读取时间
            conn.setConnectTimeout(5000);
            conn.setReadTimeout(5000);
            conn.setRequestMethod("GET");
            code=conn.getResponseCode();
            Log.i("++++++++++++++++++++++++++++++++++++++++", "initData: "+code);
            if (code==200){
                //得到流转换为String
                InputStream is = conn.getInputStream();
                ByteArrayOutputStream bos=new ByteArrayOutputStream();
                int len=0;
                byte[] buff=new byte[1024];
                while ((len=is.read(buff))!=-1){
                    bos.write(buff,0,len);
                }
                byte[] bytes=bos.toByteArray();
                result=new String(bytes);
                Log.i("********************************************", "initData: "+result);
                is.close();
            }

        } catch (Exception e) {
            e.printStackTrace();
        }
        return result;
    }
}
最后不要忘了在清单文件中添加网络权限

<uses-permission android:name="android.permission.INTERNET"/>

最后展示一下效果图
listview展示网络新闻类条目包括图片