第0天异步任务标准写法

异步任务

一.宗旨:不能写内部类

二.AsyncTask实现网络下载数据,构造传参数

(1)布局文件:activity和item布局省略:
(2)适配器代码:省略:
(3)activity代码:MainActivity.java代码

public class Main2Activity extends AppCompatActivity {
    private ArrayList<Bean.DataBean> list = new ArrayList<>();//这里创建集合
    private ListView lv;
    private MyAdapter myAdapter;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        lv = (ListView) findViewById(R.id.lv);
        myAdapter=new MyAdapter(this,list);//这里创建适配器
        lv.setAdapter(myAdapter);
        new MyTask(lv,list,myAdapter).execute("http://www.qubaobei.com/ios/cf/dish_list.php?stage_id=1&limit=20&page=1");
    }
}

(4)AsyncTask代码:自定义类继承AsyncTask,构造传参数

public class MyTask extends AsyncTask<String,String,String> {
    private ListView listView;
    private ArrayList list;
    private MyAdapter myAdapter;

    public MyTask(ListView listView, ArrayList list, MyAdapter myAdapter) {
        this.listView = listView;
        this.list = list;
        this.myAdapter = myAdapter;
    }

    @Override
    protected String doInBackground(String... strings) {
        //网络请求数据
        StringBuffer sb=new StringBuffer();
        HttpURLConnection connection=null;
        InputStream inputStream=null;
        try {
            URL url=new URL(strings[0]);
            connection = (HttpURLConnection) url.openConnection();
            connection.setReadTimeout(5*1000);
            connection.setConnectTimeout(5*1000);
            if(connection.getResponseCode()==200){
                inputStream  = connection.getInputStream();
                byte[] b=new byte[1024];
                int len=0;
                while((len=inputStream.read(b))!=-1){
                    sb.append(new String(b,0,len));
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        }finally{//最后关流
            if(inputStream!=null){
                try {
                    inputStream.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if(connection!=null){
                connection.disconnect();
            }
        }
        return sb.toString();
    }

    @Override
    protected void onPostExecute(String s) {
        super.onPostExecute(s);
        Gson gson=new Gson();
        Bean bean=gson.fromJson(s,Bean.class);
        list.addAll(bean.getData());
        myAdapter.notifyDataSetChanged();
    }
}

三.Thread+Handler+接口回调实现网络下载数据

(1)布局文件:activity和item布局省略:
(2)适配器代码:省略:
(3)自定义类继承Thread

//步骤1:自定义类继承Thread
public class MyThread extends Thread {
    private MyHandler myHandler;
    public MyThread(MyHandler myHandler) {
        this.myHandler = myHandler;
    }
    @Override
    public void run() {
        super.run();
        //网络请求数据
        StringBuffer sb=new StringBuffer();
        HttpURLConnection connection=null;
        InputStream inputStream=null;
        try {
            URL url=new URL("http://www.qubaobei.com/ios/cf/dish_list.php?stage_id=1&limit=20&page=1");
            connection = (HttpURLConnection) url.openConnection();
            connection.setReadTimeout(5*1000);
            connection.setConnectTimeout(5*1000);
            if(connection.getResponseCode()==200){
                inputStream  = connection.getInputStream();
                byte[] b=new byte[1024];
                int len=0;
                while((len=inputStream.read(b))!=-1){
                    sb.append(new String(b,0,len));
                }
                //handler发送
                Message message=new Message();
                message.obj=sb.toString();
                myHandler.sendMessage(message);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }finally{//最后关流
            if(inputStream!=null){
                try {
                    inputStream.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if(connection!=null){
                connection.disconnect();
            }
        }

    }
}

(4)自定义类继承Handler并使用接口回调

//步骤2:自定义类继承Handler,定义接口
public class MyHandler extends Handler{
    private  MyCallBack callBack;
    public MyHandler(MyCallBack callback) {
        this.callBack=callback;
    }
    @Override
    public void handleMessage(Message msg) {
        super.handleMessage(msg);
       String json= (String) msg.obj;
       //将json串回调回去
       callBack.onCallBack(json);
    }
    //回调用的接口
    interface  MyCallBack{
        public void onCallBack(String json);
    }
}

(5)activity代码:MainActivity.java代码

//步骤3:实现MyCallBack接口
public class Main3Activity extends AppCompatActivity implements MyHandler.MyCallBack {
    private ArrayList<Bean.DataBean> list = new ArrayList<>();//这里创建集合
    private ListView lv;
    private MyAdapter myAdapter;
    private MyHandler handler;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        lv = (ListView) findViewById(R.id.lv);
        myAdapter=new MyAdapter(this,list);//这里创建适配器
        lv.setAdapter(myAdapter);
        handler=new MyHandler(this);
        new MyThread(handler).start();
    }
    //回调接口中的方法
    @Override
    public void onCallBack(String json) {
        Gson gson=new Gson();
        Bean bean=gson.fromJson(json,Bean.class);
        list.addAll(bean.getData());
        myAdapter.notifyDataSetChanged();
    }
}

猜你喜欢

转载自blog.csdn.net/qq_34178710/article/details/85231233