SQLite数据库缓存:
首先缓存分好几种,可存短暂性存内存,也可放到磁盘,我这里就是利用Sqlite数据库存到SD卡中的。
那么,来缕缕思路,什么情况下需要缓存数据,当你打开app时没网一个大白板。哇好糟心,这个时候缓存数据就比较重要了,最起码给人视觉上是有视图效果的。那么就是判断有网的时候直接加载网络数据,顺便存进一组数据进数据库(图片路径也可以,用ImageLoader去展示),等判断到没网的时候,直接调用数据库查询方法,再传给适配器。
写一个判断网络判断工具类,判断是否有网,有网做网络请求,同时清空数据库,避免重复,没网加载数据库。
if (netWork) {
//调用网络请求方法
getJsonData(path + index + "/" + page);
} else {
/**
* 没网查询数据库去展示
*/
ArrayList<JsonBean.ResultsBean> resultsBeans = dao.queryData();
//集合不为空执行
if (resultsBeans != null) {
//适配器
MyAdapter myAdapter = new MyAdapter(resultsBeans , getActivity());
prl.setAdapter(myAdapter);
}
}
创建数据库,建表页 ,继承SQLiteOpenHelper 重写下面三个方法
public class MySql_dp extends SQLiteOpenHelper {
//创建数据库方法
public MySql_dp(Context context) {
super(context, "my_db", null, 1);
}
//创建表方法
@Override
public void onCreate(SQLiteDatabase db) {
//主键自增,存了一个字段
String sqlTable = "CREATE TABLE cache(id INTEGER PRIMARY KEY AUTOINCREMENT,title TEXT,url TEXT)";
db.execSQL(sqlTable);
}
//更新数据库方法
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
}
在创建个数据库管理者,里面做
public class MySql_dao {
private final SQLiteDatabase db;
private ArrayList<JsonBean.ResultsBean> list;
//构造方法
public MySql_dao(Context context) {
//实例化sql数据库类
MySql_dp mySql_dp = new MySql_dp(context);
//数据库执行写入的操作
db = mySql_dp.getWritableDatabase();
}
//添加,直接传过来一个集合
public void insertData(ArrayList<JsonBean.ResultsBean> list) {
//根据集合长度进行添加遍历
for (int i = 0; i < list.size(); i++) {
ContentValues values = new ContentValues();
values.put("title", list.get(i).getDesc());
values.put("url", list.get(i).getPic_url());
db.insert("cache", null, values);
}
}
//查询,返回类型集合
public ArrayList<JsonBean.ResultsBean> queryData() {
Cursor query = db.query("cache", null, null, null, null, null, null);
ArrayList<JsonBean.ResultsBean> list = new ArrayList<>();
while (query.moveToNext()) {
String title = query.getString(query.getColumnIndex("title"));
String url = query.getString(query.getColumnIndex("url"));
//实例化对象--->赋值
Data data = new Data();
data.setNews_title(tilte);
data.setPic_url(url);
//对象添加到集合
list.add(data);
}
//关游标
query.close();
return list;
}
//删除,库内所有数据
public void deleteData() {
db.delete("cache", null, null);
}
}