AsyncTask获取网络数据

来源:互联网 发布:网络语言膜法什么意思 编辑:程序博客网 时间:2024/06/06 01:51

AsyncTask 实现主要

方法1 :doInBackground   这是自动生成的,这个方法执行异步任务运行在子线程中

方法2:onProgressUpdate   (这个需要自己写)这个就是进度条,要做进度条的话还得加个 onPreExecute 方法,这个是第一执行,在doInBackground前面调用(这个不怎么重要,就不写了,可以上网看那些大牛写的)

方法3:onPostExecute   (这个也需要自己写)这个就是主线程。里面做UI更新,这个方法在主线程执行,doInBackground任务执行的结果作为这个方法的参数返回

其中1,3是必须写的,进度条 的话要搭配onPreExecute。下面就是代码


private void getDatas(String path) {


        new AsyncTask<String, Void, String>() {

            private String s;
            //onPostExecute这个方法需要自己写,相当于handler   RunOnUIThread,更新UI界面
            @Override
            protected void onPostExecute(String s) {

                super.onPostExecute(s);

                 //用gson解析网上的json串,需要导入gson依赖,这个是我用的json串,自己看情况修改

                Gson gson = new Gson();
                DateBean dateBean = gson.fromJson(s, DateBean.class);
                List<DateBean.ItemListBeanX.DataBeanX.ItemListBean> itemList1 = dateBean.getItemList().get(0).getData().getItemList();
                myAdapter adapter = new myAdapter(itemList1);
                listView.setAdapter(adapter);

            }

             //就是子线程,用来做耗时操作的

            @Override
            protected String doInBackground(String... strings) {
                try {
                    String string = strings[0];
                    URL url = new URL(string);
                    HttpURLConnection connection = (HttpURLConnection) url.openConnection();

                    connection.setRequestMethod("GET");

                    connection.setConnectTimeout(5000);
                    connection.setReadTimeout(5000);
                    int code = connection.getResponseCode();
                    if (code==HttpURLConnection.HTTP_OK){
                        InputStream is = connection.getInputStream();
                        s = StreamTools.readFromFile(is);   //StreamTools工具类,可以看我另外一个
                        return s;
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }
                return null;
            }

        }.execute(path); //这个很关键,execute就是告诉 AsyncTask开始执行了,启动了。 一定要写

    }


这个就是简单点的AsyncTask 了,不过要注意:

            优缺点很明显,优点就是简单快捷,缺点就是当有多个异步操作时,就变得复杂起来,而且AsyncTask在更新UI时,特别是大量的数据时候,放弃吧。

原创粉丝点击