AsyncTask+defaultHttpClient = listview图片+文字展示

简述:用defaultHttpClient 获取去网络json数据,在AsyncTask中获取图片和文字,并赋值到listView,由于网络获取是费时操作所以需要在子线程中运行。

第一步:添加依赖

useLibrary ‘org.apache.http.legacy’
implementation ‘com.google.code.gson:gson:2.8.5’

第二步:初始化组件开启、子线程(布局里只有一个listview)

在UI线程开启子线程,调用AsyncTask方法,传入字符串

  new Thread(){
            @Override
            public void run() {
                super.run();
                new Myasync().execute(urlString);
            }
        }.start();

第三步:继承AsyncTask方法<传进值得类型,更新进度类型,返回值类型>

**重写onPostExecute方法在其中可更新UI

class Myasync extends AsyncTask<String,Void,String>{
        @Override
        protected String doInBackground(String... strings) {
            String json = Net.getJson(strings[0]);
            return json;
        }

        @Override
        protected void onPostExecute(String s) {
            super.onPostExecute(s);
            Gson gson = new Gson();
            ArrayList<Data> data = gson.fromJson(s, JsonData.class).getData();
            MyAdapter myAdapter = new MyAdapter(data,getActivity());
            listView.setAdapter(myAdapter);

        }
    }

第四步:配置适配器,用AsyncTask添加布局中的图片

public class MyAdapter extends BaseAdapter {
    ArrayList<Data> data;
    Context context;

    public MyAdapter(ArrayList<Data> data, Context context) {
        this.data = data;
        this.context = context;
    }

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

    @Override
    public Object getItem(int position) {
        return data.get(position);
    }

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

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        Horder horder = null;
        if(convertView==null){
            convertView = View.inflate(context, R.layout.item,null);
            horder = new Horder();
            horder.imageView = convertView.findViewById(R.id.item_image);
            horder.textView = convertView.findViewById(R.id.itmet_text);

            convertView.setTag(horder);
        }else{
            horder = (Horder) convertView.getTag();
        }

        horder.textView.setText(data.get(position).getNews_title());
        String pic_url = data.get(position).getPic_url();
        //Picasso.with(context).load(data.get(position).getPic_url()).into(horder.imageView);
        new MyAsynctask(horder.imageView).execute(pic_url);
        return convertView;
    }
    class Horder{
        ImageView imageView;
        TextView textView;
    }

    class MyAsynctask extends AsyncTask<String,Void,Bitmap>{
        ImageView iv;

        public MyAsynctask(ImageView iv) {
            this.iv = iv;
        }

        @Override
        protected Bitmap doInBackground(String... strings) {
            Bitmap bitmap = Net.getBitmap(strings[0]);
            return bitmap;
        }

        @Override
        protected void onPostExecute(Bitmap bitmap) {
            super.onPostExecute(bitmap);
            iv.setImageBitmap(bitmap);
        }
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值