AsyncTask和ListView的联合使用,加图片

//权限和依赖

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
compile 'com.google.code.gson:gson:2.2.4'

//网络连接类
public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //获取网络连接的类型
        int type = NetstateUtil.getNewType(MainActivity.this);
        if(type!=-1){
            Toast.makeText(this,"我有网络",Toast.LENGTH_SHORT).show();
        }else{
            Toast.makeText(this,"请检查网络",Toast.LENGTH_SHORT).show();
        }
    }
}

//main
private ListView lv;
String surl="https://www.toutiao.com/api/pc/focus/";
//先创建集合,用于更新listview
List<com.a1511j.day03_rk3.Bean.bean.DataBean.PcFeedFocusBean> list=new ArrayList<>();
private Myadaper m;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    int i = Netwang.toint(MainActivity.this);
    if(i!=-1){
        Toast.makeText(this,"我有网络",Toast.LENGTH_SHORT).show();
        lv = (ListView) findViewById(R.id.lv);
        m = new Myadaper();
        lv.setAdapter(m);
        //直接调用asyncTask类请求网络,把url传进去
        AsyncTask<String, Void, String> execute = new MAsyncTask().execute(surl);
    }else{
        Toast.makeText(this,"请连接网络",Toast.LENGTH_SHORT).show();
    }
}
//适配器
public class Myadaper extends BaseAdapter{

    @Override
    public int getCount() {
        return list.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) {
        if(view==null){
            view=View.inflate(MainActivity.this,R.layout.aa,null);
        }
        TextView tv=view.findViewById(R.id.tv);
        ImageView iv=view.findViewById(R.id.iv);
        tv.setText(list.get(i).getTitle());
        //用AsyncTask1传过去有参ImageView控件和接口.刷新图片
        new MAsyncTask1(iv).execute("http:"+list.get(i).getImage_url());
        return view;
    }
}

/**
 * 泛型  第一个参数:传过来的url
 *      第二个参数 :进度
 *      第三个参数 :接口请求成功返回的东西(json,bitmap)
 */
private class MAsyncTask1 extends AsyncTask<String,Void,Bitmap>{
    ImageView iv;
    public MAsyncTask1(ImageView iv) {
        this.iv=iv;
    }

    /**
     *  这个方法在子线程,在这个方法里进行联网操作
     * @param strings 可变参数,底层是数组,里面放的是传过来的参数;
     * @return
     */
    @Override
    protected Bitmap doInBackground(String... strings) {
        String string = strings[0];
        Bitmap bit = Netutil.getNetBitmap(string);
        return bit;
    }
    /**
     * 这个方法在主线程, 直接更新ui即可;
     * @param s s是doInBackground请求接口成功后返回的json
     */
    @Override
    protected void onPostExecute(Bitmap bitmap) {
        super.onPostExecute(bitmap);
        iv.setImageBitmap(bitmap);
    }
}


private class MAsyncTask extends AsyncTask<String,Void,String>{
    //这是子线程
    @Override
    protected String doInBackground(String... strings) {

        final String url = strings[0];
        //直接用工具类获取json
        String tostr = Netutil.getNetJson(url);
        //返回给(前台方法,主线程方法onPostExecute)
        return tostr;
    }
    //这个是主线程
    @Override
    protected void onPostExecute(String s) {
        super.onPostExecute(s);
        //解析s,  直接给控件展示;
        Gson g=new Gson();
        bean bean = g.fromJson(s, bean.class);
        com.a1511j.day03_rk3.Bean.bean.DataBean data = bean.getData();
        //把一个集合的数据放入另一个集合
        List<com.a1511j.day03_rk3.Bean.bean.DataBean.PcFeedFocusBean> focus = data.getPc_feed_focus();
        list.addAll(focus);
        m.notifyDataSetChanged();
    }
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值