(一)判断是否有数据
创建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(); } }