数据库Sqlite+线程(其余部分请参照另一篇博客“数据库Sqlite+AsyncTask”)

 
 
MainActivity
private PullToRefreshListView plv;
String baseUrl = "https://api.tianapi.com/wxnew/?key=48a7d7193e11bd2dd4a683b6e2f90a4f&num=10&page=";
private int page = 0;
ArrayList<Product.NewslistBean> list = new ArrayList<>();
Handler handler = new Handler(){
    @Override
    public void handleMessage(Message msg) {
        super.handleMessage(msg);
        int what = msg.what;
        if (what==1){
            String json = (String) msg.obj;
            jsonDao.insertData(baseUrl + page,json);
            Gson gson = new Gson();
            Product product = gson.fromJson(json, Product.class);
            List<Product.NewslistBean> newslist = product.getNewslist();
            list.addAll(newslist);
            adapater.notifyDataSetChanged();
            plv.onRefreshComplete();
        }
        if (what==0){
            adapater.notifyDataSetChanged();
            plv.onRefreshComplete();
        }
    }
};
private MyAdapater adapater;
private ImageLoader imageLoader;
private JsonDao jsonDao;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    //加载布局
    setContentView(R.layout.activity_main);
    //加载资源ID
    plv = findViewById(R.id.plv);
    plv.setMode(PullToRefreshBase.Mode.BOTH);//设置支持上下拉

    //数据Dao层
    jsonDao = new JsonDao(this);
    imageLoader = ImageLoader.getInstance();
    //适配器
    adapater = new MyAdapater();
    plv.setAdapter(adapater);
    //请求数据
    getNetData(0);

    plv.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2<ListView>() {
        @Override
        public void onPullDownToRefresh(PullToRefreshBase<ListView> pullToRefreshBase) {
            list.clear();
            getNetData(0);
        }

        @Override
        public void onPullUpToRefresh(PullToRefreshBase<ListView> pullToRefreshBase) {
            page++;
            getNetData(page);
        }
    });
}

private void getNetData(final int page) {
    String murl = baseUrl + page;
    int type = NetStateUtil.isConn(this);
    if(type!=-1){
        //开一个线程
        new Thread(new Runnable() {
            @Override
            public void run() {
                //拿到数据
                String json = NetUtils.getNetjson(baseUrl + page);
                Message msg = new Message();
                msg.what = 1;
                msg.obj = json;
                handler.sendMessage(msg);
                /*jsonDao.insertData(baseUrl + page,json); 注:这个要在主线程中进行添加
                Gson gson = new Gson();
                Product product = gson.fromJson(json, Product.class);
                List<Product.NewslistBean> newslist = product.getNewslist();
                list.addAll(newslist);
                handler.sendEmptyMessage(0);*/
            }
        }).start();
    }else {
        //从数据库查询
        String s = jsonDao.queryData(murl);
        if (!s.isEmpty()){
                Gson gson = new Gson();
                Product product = gson.fromJson(s, Product.class);
                List<Product.NewslistBean> newslist = product.getNewslist();
                list.addAll(newslist);
            handler.sendEmptyMessage(0);
        }
    }

}

private class MyAdapater extends BaseAdapter{
    @Override
    public int getCount() {
        return list.size();
    }

    @Override
    public Object getItem(int position) {
        return list.get(position);
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder holder;
        if(convertView==null){
            convertView = View.inflate(MainActivity.this,R.layout.item_layout,null);
            holder = new ViewHolder();
            holder.imgview = (ImageView)convertView.findViewById(R.id.imgview);
            holder.textview = (TextView) convertView.findViewById(R.id.textview);
            convertView.setTag(holder);
        }else {
            holder = (ViewHolder) convertView.getTag();
        }
        holder.textview.setText(list.get(position).getTitle());
        //调用设置图片
        DisplayImageOptions displayImageOption = NetUtils.getDisplayImageOption();
        imageLoader.displayImage(list.get(position).getPicUrl(),holder.imgview,displayImageOption);
        return convertView;
    }

    class ViewHolder{
        public ImageView imgview;
        public TextView textview;
    }
}

猜你喜欢

转载自blog.csdn.net/ediao_nvhai/article/details/79789538