實現簡易離線資料庫快取
阿新 • • 發佈:2019-02-09
public class SQLiteHelper extends SQLiteOpenHelper { public SQLiteHelper(Context context) { super(context, "Test.db", null, 1); } @Override public void onCreate(SQLiteDatabase sqLiteDatabase) { sqLiteDatabase.execSQL("create table jsonData(id integer primary key autoincrement," + "url text not null," + "json text not null)"); } @Override public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) { } }
public class JsonDao { private final SQLiteHelper helper; public JsonDao(Context context) { helper = new SQLiteHelper(context); } //先刪除再新增 public void insert(String url,String json){ SQLiteDatabase database = helper.getWritableDatabase(); database.delete("jsonData","url=?",new String[]{url}); ContentValues values = new ContentValues(); values.put("url",url); values.put("json",json); database.insert("jsonData",null,values); } //查詢 public String select(String url){ SQLiteDatabase database = helper.getWritableDatabase(); Cursor cursor = database.query("jsonData", null, "url=?", new String[]{url}, null, null, null); String json=""; while (cursor.moveToNext()){ json=cursor.getString(cursor.getColumnIndex("json")); } return json; } }
public class MainActivity extends AppCompatActivity { private PullToRefreshListView ptr_lv; private String urlString="http://api.expoon.com/AppNews/getNewsList/type/1/p/"; private int page; private List<JavaBean.DataBean> list=new ArrayList<JavaBean.DataBean>(); private JsonDao dao; private MyAdapter adapter; private Handler handler=new Handler(){ @Override public void handleMessage(Message msg) { super.handleMessage(msg); if (msg.what == 0) { adapter.notifyDataSetChanged(); ptr_lv.onRefreshComplete(); } } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ptr_lv = (PullToRefreshListView) findViewById(R.id.ptr_lv); dao = new JsonDao(MainActivity.this); //允許上下拉載入重新整理 ptr_lv.setMode(PullToRefreshBase.Mode.BOTH); //配置介面卡 adapter = new MyAdapter(); ptr_lv.setAdapter(adapter); //獲取資料 getNetData(0); ptr_lv.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(int page) { final String url=urlString+page; //判斷網路狀態 if (NetTypeUtil.getNetType(MainActivity.this) == -1) { Toast.makeText(MainActivity.this, "請檢查網路連線!", Toast.LENGTH_SHORT).show(); String json = dao.select(url); if (!json.isEmpty()){ Gson gson = new Gson(); JavaBean javaBean = gson.fromJson(json, JavaBean.class); list.addAll(javaBean.getData()); adapter.notifyDataSetChanged(); ptr_lv.onRefreshComplete(); } }else{ new Thread(){ @Override public void run() { super.run(); String netJson = NetUtil.getNetJson(url); Gson gson = new Gson(); JavaBean javaBean = gson.fromJson(netJson, JavaBean.class); list.addAll(javaBean.getData()); //存入資料庫 dao.insert(url,netJson); //重新整理介面卡,關閉上下拉檢視 handler.sendEmptyMessage(0); } }.start(); } } public class MyAdapter extends BaseAdapter { private ImageLoader imageLoaderInstance=ImageLoader.getInstance(); @Override public int getCount() { return list.size(); } @Override public Object getItem(int i) { return list.get(i); } @Override public long getItemId(int i) { return i; } @Override public View getView(int i, View view, ViewGroup viewGroup) { ViewHolder holder; if (view==null){ view=View.inflate(MainActivity.this, R.layout.item1_layout,null); holder=new ViewHolder(); holder.img=view.findViewById(R.id.img); holder.text1=view.findViewById(R.id.text1); view.setTag(holder); } else { holder= (ViewHolder) view.getTag(); } imageLoaderInstance.displayImage(list.get(i).getPic_url(), holder.img, ImageLoaderUtil.getOptions()); holder.text1.setText(list.get(i).getNews_title()); return view; } class ViewHolder{ private ImageView img; private TextView text1; } } }