请求网络,绘制ListView

来源:互联网 发布:linux下新建文件命令 编辑:程序博客网 时间:2024/06/16 21:47
public class MainActivity extends AppCompatActivity {    private ListView lv;    private List<News.DataBean> dataList = new ArrayList<>();    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        //获取控件        lv = (ListView) findViewById(R.id.lv);        //获取数据        getData();    }    class MyAdapter extends BaseAdapter {        @Override        public int getCount() {            return dataList.size();        }        @Override        public Object getItem(int i) {            return dataList.get(i);        }        @Override        public long getItemId(int i) {            return i;        }        @Override        public View getView(int i, View view, ViewGroup viewGroup) {            News.DataBean dataBean = dataList.get(i);            ViewHolder holder;            if (view == null) {                holder = new ViewHolder();                view = View.inflate(MainActivity.this, R.layout.list_item, null);                view.findViewById(R.id.img);                holder.img = (ImageView) view.findViewById(R.id.img);                holder.title = (TextView) view.findViewById(R.id.title);                holder.neirong = (TextView) view.findViewById(R.id.neirong);                view.setTag(holder);            } else {                holder = (ViewHolder) view.getTag();            }            holder.title.setText(dataBean.getNews_title());            holder.neirong.setText(dataBean.getNews_summary());            //设置图片,图片请求网络,使用异步            new MyAsyncTask(holder.img).execute(dataBean.getPic_url());            return view;        }        class ViewHolder {            ImageView img;            TextView title;            TextView neirong;        }    }    class MyAsyncTask extends AsyncTask<String, Void, Bitmap> {        private final ImageView img;        private Bitmap bitmap;        //有参构造把imageView        public MyAsyncTask(ImageView ima) {            this.img = ima;        }        //执行网络之前        @Override        protected void onPreExecute() {            super.onPreExecute();        }        //请求完成之后,更新ui        @Override        protected void onPostExecute(Bitmap bitmap) {            super.onPostExecute(bitmap);            img.setImageBitmap(bitmap);        }        //执行网络请求,耗时任务        @Override        protected Bitmap doInBackground(String... strings) {            try {                URL url = new URL(strings[0]);                HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();                int responseCode = urlConnection.getResponseCode();                if (responseCode == 200) {                    InputStream inputStream = urlConnection.getInputStream();                    //                    bitmap = BitmapFactory.decodeStream(inputStream);                }            } catch (MalformedURLException e) {                e.printStackTrace();            } catch (IOException e) {                e.printStackTrace();            }            return bitmap;        }        //网路请求进度        @Override        protected void onProgressUpdate(Void... values) {            super.onProgressUpdate(values);        }    }    //创建handler    Handler handler = new Handler() {        @Override        public void handleMessage(Message msg) {            super.handleMessage(msg);            if (msg.what == 1) {                String string = (String) msg.obj;                //解析json串                Gson gson = new Gson();                News news = gson.fromJson(string, News.class);                dataList = news.getData();                //创建适配器                MyAdapter myAdapter = new MyAdapter();                //连接适配器                lv.setAdapter(myAdapter);                //更新适配器                myAdapter.notifyDataSetChanged();            }        }    };    private String getData() {        //请求网络得创建线程        new Thread() {            @Override            public void run() {                super.run();                try {                    //获取网址                    URL url = new URL("http://api.expoon.com/AppNews/getNewsList/type/1/p/1");                    //打开网址                    HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();                    //                    int responseCode = urlConnection.getResponseCode();                    //判断是否连接成功                    if (responseCode == 200) {                        //获取字节流                        InputStream inputStream = urlConnection.getInputStream();                        //读取字节流                        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));                        StringBuilder stringBuilder = new StringBuilder();                        String string = "";                        while ((string = bufferedReader.readLine()) != null) {                            stringBuilder.append(string);                        }                        //通过Handler发送                        Message message = handler.obtainMessage();                        message.obj = stringBuilder.toString();                        message.what = 1;                        handler.sendMessage(message);                    }                } catch (MalformedURLException e) {                    e.printStackTrace();                } catch (IOException e) {                    e.printStackTrace();                }            }        }.start();        return null;    }}

原创粉丝点击