AsyncTask 的操作

本文介绍如何使用AsyncTask进行网络数据加载,并通过ListView在Android应用中展示这些数据。主要内容包括检查网络状态、使用HttpURLConnection发起网络请求、解析JSON数据、自定义Adapter以及异步加载和显示图片。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1--- 联网权限


2 -- 主线程调用AsyncTask类实例调用

/**
         * 1  MAsyncTask在主线程实例化;
         *  2 doInBackground在子线程,会把子线程请求的数据发送给在主线程运行的方法(onPostExecute)
         *  3 底层原理是Handler+Thread;
         */
        new MAsyncTask().execute(urlString);


3--- 编写AsyncTask类;

要求:

1.   主页面使用ListView显示内容(10分)

2.   进入页面之后判断网络状态是否可用(10分)

3.   当页面不可用时弹出吐司提示,页面可用时使用网络加载数据(10分)

4.   实例化AsyncTask的对象并重写其中4个方法(10分)

5.   使用HttpURLConnection创建网络请求,创建连接对象并返回网络数据(10分)

6.   在完成的回调方法中解析获取到的数据(10分)

7.   创建列表的适配器,传入类型为解析后的数据类型(10分)

8.   完成适配器的优化和刷新(10分)

9.   适配器中展示图片的时候图片地址(image_url字段)前面加上”http:”再做展示(10分)



package com.example.rk112;
import android.graphics.Bitmap;
import android.os.AsyncTask;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
import com.example.rk112.javabeab.Itoos;
import com.example.rk112.javabeab.Utils;
import com.example.rk112.javabeab.bean;
import com.google.gson.Gson;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends AppCompatActivity {

    private ListView lv;
    //路径
    private String Urlhttp = "https://www.toutiao.com/api/pc/focus/";


//集合
    List<com.example.rk112.javabeab.bean.DataBean.PcFeedFocusBean> list=new ArrayList<com.example.rk112.javabeab.bean.DataBean.PcFeedFocusBean>();
    private Myadapet myadapet;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
//获取控件
        lv = (ListView) findViewById(R.id.lv);
//实例化适配器
        myadapet = new Myadapet();
//获取网络类型
        int netype = Utils.getNetype(this);
 //是否有网
        if (netype !=-1) {
            //获取适配器
            lv.setAdapter(myadapet);
            //实力化类并执行;
            new Myasyntask().execute(Urlhttp);//Urlhttp路径

        } else {
            Toast.makeText(this, "没有网络", Toast.LENGTH_SHORT).show();
        }


        ;
    }

    class Myasyntask extends AsyncTask<String, Void, String> {

     //子线程运行的方法
        @Override
        protected String doInBackground(String... strings) {
            //strings数组
            String jiexi = strings[0];
            //实力化解析的方法类
            String ioss = Itoos.ioss(jiexi);

            return ioss;
        }

        @Override//回调成功的方法
        protected void onPostExecute(String s) {// s就是回调的是ioss

            super.onPostExecute(s);
           //实力化gson
            Gson g = new Gson();
             //获取解析的类
            bean bean = g.fromJson(s, bean.class);//bean.class类
            //获取data类
            com.example.rk112.javabeab.bean.DataBean data = bean.getData();
            //获取pc_feed_focus数组
            List<com.example.rk112.javabeab.bean.DataBean.PcFeedFocusBean> pc_feed_focus =
                    data.getPc_feed_focus();
            //pc_feed_focus集合放入list的集合
            list.addAll(pc_feed_focus);
           //刷新
            myadapet.notifyDataSetChanged();
        }
    }
   //获取图片的Asyntask的类
//    1.String :Url路径
//    2.Void :进度
//    3.Bitmap :图片
    class Myasyntaskimag extends AsyncTask<String, Void, Bitmap>{
        ImageView img;
      //有参构造
        public Myasyntaskimag(ImageView img) {
            this.img=img;
        }
        @Override
        protected Bitmap doInBackground(String... strings) {
            String string = strings[0];
            Bitmap bit = Itoos.bit(string);
            return bit;
        }

        @Override
        protected void onPostExecute(Bitmap bitmap) {
            super.onPostExecute(bitmap);

            img.setImageBitmap(bitmap);
        }
    }

   class Myadapet 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(getApplicationContext(),R.layout.f1,null);

           }
           ImageView img =(ImageView) view.findViewById(R.id.img);
           TextView tv = (TextView)view.findViewById(R.id.tv);
           tv.setText(list.get(i).getTitle());
             //实力化获取图片的Asyntask的类并把图片控件传过去
            new Myasyntaskimag(img).execute("http:"+list.get(i).getImage_url());//"http:"+list.get(i).getImage_url()路径
           return view;
       }

   }

}
内容概要:本文介绍了多种开发者工具及其对开发效率的提升作用。首先,介绍了两款集成开发环境(IDE):IntelliJ IDEA 以其智能代码补全、强大的调试工具和项目管理功能适用于Java开发者;VS Code 则凭借轻量级和多种编程语言的插件支持成为前端开发者的常用工具。其次,提到了基于 GPT-4 的智能代码生成工具 Cursor,它通过对话式编程显著提高了开发效率。接着,阐述了版本控制系统 Git 的重要性,包括记录代码修改、分支管理和协作功能。然后,介绍了 Postman 作为 API 全生命周期管理工具,可创建、测试和文档化 API,缩短前后端联调时间。再者,提到 SonarQube 这款代码质量管理工具,能自动扫描代码并检测潜在的质量问题。还介绍了 Docker 容器化工具,通过定义应用的运行环境和依赖,确保环境一致性。最后,提及了线上诊断工具 Arthas 和性能调优工具 JProfiler,分别用于生产环境排障和性能优化。 适合人群:所有希望提高开发效率的程序员,尤其是有一定开发经验的软件工程师和技术团队。 使用场景及目标:①选择合适的 IDE 提升编码速度和代码质量;②利用 AI 编程助手加快开发进程;③通过 Git 实现高效的版本控制和团队协作;④使用 Postman 管理 API 的全生命周期;⑤借助 SonarQube 提高代码质量;⑥采用 Docker 实现环境一致性;⑦运用 Arthas 和 JProfiler 进行线上诊断和性能调优。 阅读建议:根据个人或团队的需求选择适合的工具,深入理解每种工具的功能特点,并在实际开发中不断实践和优化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值