异步刷新加载

来源:互联网 发布:解压 mac 编辑:程序博客网 时间:2024/05/18 03:39
protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //实例化db
        MyHelper helper = new MyHelper(MainActivity.this);
        db = helper.getWritableDatabase();
        //初始化xlistview
        listView = (XListView) findViewById(R.id.mylist);
        adapter = new MyAdapter(MainActivity.this);
        listView.setAdapter(adapter);
        //给listview设置上拉加载更多
        listView.setPullLoadEnable(true);
        listView.setPullRefreshEnable(true);
        //设置上拉加载监听
        listView.setXListViewListener(new XListView.IXListViewListener() {
            @Override
            public void onRefresh() {
                //刷新
                page = 1;
                addTask();
            }

            @Override
            public void onLoadMore() {
                //加载更多,请求第page++页数据;
                page++;
                addTask();
            }
        });
        //请求第一页数据;
        addTask();
    }

    //启动异步任务;
    private void addTask() {

        MyTask task = new MyTask();
        task.execute("");
    }

    class MyTask extends AsyncTask<String, Integer, String> {
        @Override
        protected String doInBackground(String... strings) {
            //网络请求
            return getDataFromHttp();
        }

        @Override
        protected void onPostExecute(String s) {
            super.onPostExecute(s);
            if (s != null && !s.equals("")) {
                //解析从网络获取的数据
                Gson gson = new Gson();
                DataBean bean = gson.fromJson(s, DataBean.class);
                if (bean != null) {
                    List<DataBean.ResultBean> resultBeen = bean.results;
                    if (resultBeen != null && resultBeen.size() > 0) {
                        //加载到listview上显示;
                        if (page > 1) {
                            adapter.addData(resultBeen);
                            //上拉加载更多时,将数据添加入数据库中;
                            addDb(resultBeen);
                        } else {
                            adapter.updateData(resultBeen);
                          //  page==1时或者是第一次获取数据;或者是下拉刷新;只有在第一次获取数据时需要添加数据库
                            if(tag){
                                addDb(resultBeen);
                                tag=false;
                            }
                        }
                        listView.stopLoadMore();
                        listView.stopRefresh();
                    } else {
                        Toast.makeText(MainActivity.this, "返回数据列表为空!", Toast.LENGTH_LONG).show();
                    }
                } else {
                    Toast.makeText(MainActivity.this, "数据解析失败!", Toast.LENGTH_LONG).show();
                }
            } else {
                Toast.makeText(MainActivity.this, "网络获取数据失败!", Toast.LENGTH_LONG).show();
            }
        }
    }

    private String getDataFromHttp() {
        try {
            String path = URL_HOST + limit + "/" + page;
            URL url = new URL(path);
            HttpURLConnection connection = (HttpURLConnection) url.openConnection();
            int code = connection.getResponseCode();
            if (code == 200) {
                InputStream is = connection.getInputStream();
                String str = "";
                BufferedReader reader = new BufferedReader(new InputStreamReader(is));
                StringBuilder builder = new StringBuilder();
                while ((str = reader.readLine()) != null) {
                    builder.append(str);
                }
                is.close();
                reader.close();
                System.out.println("page=" + page + "   " + builder.toString());
                return builder.toString();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    //将从网络获取的数据添加到数据库中;
    private void addDb(List<DataBean.ResultBean> list) {
        for (int i = 0; i < list.size(); i++) {
            ContentValues values = new ContentValues();
            values.put("title", list.get(i).title);
            values.put("content", list.get(i).content);
            db.insert("week3", null, values);
        }
    }
}
原创粉丝点击