pulltorefresh列表 网络请求有网 请求接口并保存到数据库 没网读取数据库内容

activitymain布局

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="bwie.com.sqllite_2.MainActivity">

    <com.handmark.pulltorefresh.library.PullToRefreshListView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/pulltf"
        >
    </com.handmark.pulltorefresh.library.PullToRefreshListView>
</android.support.constraint.ConstraintLayout>

-----------------------------------------pulltorefresh 需要导Model

接口回调Utils类

package bwie.com.sqllite_2.utils;

import android.os.AsyncTask;
import android.text.TextUtils;

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;

/**
 * Created by 我 on 2018/7/24.
 */

public class HttpUtils {
    private static final HttpUtils ourInstance = new HttpUtils();

    public static HttpUtils getInstance() {
        return ourInstance;
    }

    private HttpUtils() {
    }
    public void getLodeFromJson(String url,NetCallBack callBack){
        new Asycn(callBack).execute(url);
    }

    private class Asycn extends AsyncTask<String,Void,String>{
        private NetCallBack netCallBack;
        public Asycn(){

        }
        public Asycn(NetCallBack netCallBack){
            this.netCallBack=netCallBack;
        }
        @Override
        protected String doInBackground(String... params) {
            //请求网络
            HttpURLConnection connection=null;
            try {
                URL url=new URL(params[0]);
                connection = (HttpURLConnection) url.openConnection();
                connection.setConnectTimeout(5000);
                connection.setReadTimeout(5000);
                if (connection.getResponseCode()==200) {
                    InputStream inputStream = connection.getInputStream();
                    return inputStream2String(inputStream);
                }
            } catch (Exception e) {
                netCallBack.onError(e.getMessage());
            }finally {
                if (connection!=null) {
                    connection.disconnect();
                }
            }
            return null;
        }

        @Override
        protected void onPostExecute(String s) {
            super.onPostExecute(s);
            if (TextUtils.isEmpty(s)){
                netCallBack.onError("没有请求到数据");
            }else {
                netCallBack.onSuccess(s);
            }
        }
    }

    private String inputStream2String(InputStream inputStream) throws IOException {
        ByteArrayOutputStream bos=new ByteArrayOutputStream();
        byte[] buffer=new byte[1024];
        int len=-1;
        while ((len=inputStream.read(buffer))!=-1){
            bos.write(buffer,0,len);
        }
        return new String(bos.toByteArray());
    }

    //定义网络处理接口
    public interface NetCallBack{
        void onSuccess(String result);
        void onError(String errorMsg);
    }
}

MainAcitivity

package bwie.com.sqllite_2;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.widget.ListView;

import com.google.gson.Gson;
import com.handmark.pulltorefresh.library.PullToRefreshBase;
import com.handmark.pulltorefresh.library.PullToRefreshListView;

import java.util.ArrayList;

import bwie.com.sqllite_2.adapter.MyAdapter;
import bwie.com.sqllite_2.bean.Shop;
import bwie.com.sqllite_2.helper.Dao;
import bwie.com.sqllite_2.helper.DbShopBean;
import bwie.com.sqllite_2.utils.HttpUtils;

public class MainActivity extends AppCompatActivity implements HttpUtils.NetCallBack {

    private PullToRefreshListView pulltf;
    private String url = "http://39.108.3.12:3000/v1/restaurants?offset=0&limit=5&lng=116.29845&lat=39.95933";
    private ArrayList<Shop.DataBean> dataBeans;
    private MyAdapter adapter;
    private Dao dao;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //初始化控件
        pulltf = (PullToRefreshListView) findViewById(R.id.pulltf);
        //设置pull
        pulltf.setMode(PullToRefreshBase.Mode.BOTH);
        pulltf.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2<ListView>() {
            @Override
            public void onPullDownToRefresh(PullToRefreshBase<ListView> refreshView) {

            }

            @Override
            public void onPullUpToRefresh(PullToRefreshBase<ListView> refreshView) {

            }
        });
        //创建集合存list
        dataBeans = new ArrayList<>();
        //创建适配器
        adapter = new MyAdapter(MainActivity.this, dataBeans);
        //添加到适配器
        pulltf.setAdapter(adapter);
        //创建dao曾
        dao = new Dao(this);
        //判断数据库是否存在,存在直接展示  不存在 读取网络
        DbShopBean shopBean = dao.query(url);
        if (shopBean!=null){
            //解析数据
            Shop shop = parseJson(shopBean.json);
            //databeans是集合
            dataBeans.addAll(shop.getData());
            adapter.notifyDataSetChanged();
        }else {
            //获取网络求求,执行接口回调
            HttpUtils.getInstance().getLodeFromJson(url,this);
        }
        //创建集合

    }

    @Override
    public void onSuccess(String result) {
        Log.i("aaa","result"+result.toString());
       //插入数据库
        dao.insert(new DbShopBean(url,result));
        //在列表中展示数据
        Shop shop = parseJson(result);
        // Gson gson = new Gson();
        /*Shop shop = gson.fromJson(result, Shop.class);*/

        dataBeans.addAll(shop.getData());
        adapter.notifyDataSetChanged();
    }

    //解析本地json
    private Shop parseJson(String json) {
        Gson gson = new Gson();
        return gson.fromJson(json ,Shop.class);
    }

    @Override
    public void onError(String errorMsg) {
        Log.i("aaa","errorMsg没有数据");
    }
}

适配器Adapter

适配器布局中 就一个textview

package bwie.com.sqllite_2.adapter;

import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;

import java.util.List;

import bwie.com.sqllite_2.R;
import bwie.com.sqllite_2.bean.Shop;

/**
 * Created by 我 on 2018/7/24.
 */

public class MyAdapter extends BaseAdapter{
    private Context context;
    private List<Shop.DataBean> list;

    public MyAdapter(Context context, List<Shop.DataBean> list) {
        this.context = context;
        this.list = list;
    }

    @Override
    public int getCount() {
        return list == null ? 0 : list.size();
    }

    @Override
    public Shop.DataBean 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) {
        // 1, 使用ViewHolder减少FindViewById的次数;2. ConvertView缓存对象
        ShopViewHolder holder = null;
        if (convertView == null) {
            holder = new ShopViewHolder();
            convertView =View.inflate(context, R.layout.item_adapter1,null);
            holder.text_title = (TextView) convertView.findViewById(R.id.text_title);
            convertView.setTag(holder);
        } else {
            holder = (ShopViewHolder) convertView.getTag();
        }

        holder.text_title.setText(list.get(position).getName());

        return convertView;
    }

    class ShopViewHolder {
        TextView text_title;
    }
}

//Gson请求需要bean类  

//原生不需要

//数据库内容

MyHelper

package bwie.com.sqllite_2.helper;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

/**
 * Created by 我 on 2018/7/24.
 */

public class MyHelper extends SQLiteOpenHelper{
    private static final int DB_VERSION = 1;
    private static final String DB_NAME = "shop.db";

    public MyHelper(Context context) {
        super(context, DB_NAME, null, DB_VERSION);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        // db.execSQL("create table shop(_id Integer primary key autoincrement, url varchar(200), json TEXT)");
        db.execSQL("create table shop(_id Integer primary key autoincrement,url varchar(200),json TEXT)");
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

    }
}

Dao层

package bwie.com.sqllite_2.helper;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;

/**
 * Created by 我 on 2018/7/24.
 */

public class Dao {

    private final MyHelper helper;
    private final SQLiteDatabase database;

    public Dao(Context context) {
        helper = new MyHelper(context);
        database = helper.getWritableDatabase();
    }


    //添加
    public void insert(DbShopBean bean){
        ContentValues values = new ContentValues();
        values.put("url",bean.url);
        values.put("json",bean.json);
        database.replace("shop",null,values);
    }

    //查询
    public DbShopBean query(String url){
        DbShopBean bean=null;
        Cursor cursor = database.rawQuery("select * from shop where url=?", new String[]{url});
        if (cursor.moveToNext()) {
            bean = new DbShopBean();
            //读取字段
            bean._id=cursor.getInt(cursor.getColumnIndex("_id"));
            bean.url = cursor.getString(cursor.getColumnIndex("url"));
            bean.json=cursor.getString(cursor.getColumnIndex("json"));
        }
        return bean;
    }
}

数据库封装类

bean

package bwie.com.sqllite_2.helper;

/**
 * Created by 我 on 2018/7/24.
 */

public class DbShopBean {
    public Integer _id;
    public String url;
    public String json;
    public DbShopBean(){

    }

    public DbShopBean(String url, String json) {
        this.url = url;
        this.json = json;
    }

    @Override
    public String toString() {
        return "DbShopBean{" +
                "_id=" + _id +
                ", url='" + url + '\'' +
                ", json='" + json + '\'' +
                '}';
    }
}

猜你喜欢

转载自blog.csdn.net/nideyida1/article/details/81209522
今日推荐