数据库缓存数据

(一)判断是否有数据

创建SqliteActivity:

         //网络数据地址       

    private String url = "https://gank.io/api/data/福利/10/1";
    private NewDao dao;
    private Utils instance;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_sqlite);
        //初始化数据
        list_view = findViewById(R.id.list_view);
        //创建dao包
        dao = new NewDao(this);
        // 现根据Url 去本地数据库中查找 存在否 存在 直接展示 不存在去网络查找
        NewsBean query = dao.query(url);
        //调动工具类获取返回值
        instance = Utils.getInstance();
        instance.setNetCallback(this);
        //判断查询的结果是否为空
        if (query != null) {
            //展示
            paseJson(query.responseJson);
        } else {
            // 判断有没有网络 有网 去请求 没网提示用户
            if (Utils.isNetConnection(this)) {
                instance.getDataFromServer(url);
            } else {
                Toast.makeText(this, "请连接网络!", Toast.LENGTH_SHORT).show();
            }
        }
    }

    @Override
    public void onSuccess(String result) {
        paseJson(result);
        // 保存到数据库
        NewsBean daoBean = new NewsBean(url, result);
        dao.save(daoBean);
    }
    /**
     * 解析数据
     *
     * @param result
     */
    private void paseJson(String result) {
        Gson gson = new Gson();
        GankBean gankBean = gson.fromJson(result, GankBean.class);
        list_view.setAdapter(new PullToRefreshAdaper(this, gankBean.getResults()));
        // 展示的adapter可以参考文章《PullToRefreshListView的简单使用和数据的展示++++最后拓展一下轮播加载到PullToRefreshListView的控件上》
    }
}

(二)创建的dao包需要写保存和查询的两个方法

    Context context;
    SQLiteDatabase database;
/***注意不是有参函数***/
    public NewDao(Context context) {
        this.context = context;
        NewsSqliteOpenHelper openHelper = new NewsSqliteOpenHelper(context);
        database = openHelper.getWritableDatabase();
    }
    //保存
    public void save (NewsBean newsBean){
        ContentValues values = new ContentValues();
        values.put("url",newsBean.url);
        values.put("responsejson",newsBean.responseJson);
        database.replace("news",null,values);
    }
    //查询
    public NewsBean query(String url){
        NewsBean newsBean = null;
        Cursor cursor = database.rawQuery("select * from news where url =?", new String[]{url});
        //Cursor cursor = database.query("news", null, "url = ?", new String[]{url}, null, null, null);
        if (cursor.moveToNext()){
            newsBean = new NewsBean();
            newsBean._id = cursor.getInt(cursor.getColumnIndex("_id"));
            newsBean.url = cursor.getString(cursor.getColumnIndex("url"));
            newsBean.responseJson = cursor.getString(cursor.getColumnIndex("responsejson"));
        }
        return newsBean;
    }

}

(三)创建数据库帮助类

public class NewsSqliteOpenHelper extends SQLiteOpenHelper {
    public NewsSqliteOpenHelper(Context context) {
        super(context, "news.db", null, 1);
    }
    //创建表
    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL("create table news(_id Integer primary key autoincrement, url text, responsejson text)");
    }

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

    }
}

(四)第二部创建Dao包的时候需要创建一个数据库的bean包,里面只需存放查询或者保存时需要用到的字段即可,例如: 

public class NewsBean {
    public Integer _id;
    public String url;
    public String responseJson;

    public NewsBean() {
    }

    public NewsBean(String url, String responseJson) {
        this.url = url;
        this.responseJson = responseJson;
    }
}

(五)判断网络是否可用时网络工具类

//判断网络是否可用
public static boolean isNetConnection(Context context) {
    ConnectivityManager manager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo networkInfo = manager.getActiveNetworkInfo();
    if (networkInfo == null) {
        return false;
    } else {
        return networkInfo.isAvailable();
    }
}

猜你喜欢

转载自blog.csdn.net/H_BuilDer/article/details/81749117
今日推荐