免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2317 | 回复: 0
打印 上一主题 下一主题

Android数据库缓存 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2015-06-17 09:41 |只看该作者 |倒序浏览
简单的数据库缓存实现,有不足的地方请指出~

使用示例:
    CacheHelper.init(this).setJson("url", "json");
    CacheHelper.init(this).getJson("url", new Handler(){
      @Override
      public void handleMessage(Message msg) {
        String json = (String) msg.obj;
      }
    });
    CacheHelper.init(this).clear();
  1. import android.content.ContentValues;
  2. import android.content.Context;
  3. import android.database.Cursor;
  4. import android.database.sqlite.SQLiteDatabase;
  5. import android.database.sqlite.SQLiteOpenHelper;
  6. import android.os.Handler;
  7. import android.os.Message;

  8. /**
  9. * 缓存数据库
  10. * @author lu
  11. *
  12. */
  13. public class CacheHelper extends SQLiteOpenHelper {

  14.     private static final String tableName = "JSONCACHE";
  15.     private static final String URL = "URL";
  16.     private static final String JSON = "JSON";
  17.     private static final String DATE = "DATE";

  18.     public CacheHelper(Context context) {
  19.         super(context, "cache.db", null, 1);
  20.     }

  21.     @Override
  22.     public void onCreate(SQLiteDatabase db) {
  23.         //建表jsoncache,字段:请求地址url、缓存数据json、时间date
  24.         db.execSQL("CREATE TABLE "+tableName+" (ID INTEGER PRIMARY KEY AUTOINCREMENT, "+URL+" TEXT NOT NULL, "+JSON+" TEXT NOT NULL, "+DATE+" INTEGER NOT NULL )");
  25.     }

  26.     @Override
  27.     public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
  28.     }
  29.      
  30.     private static CacheHelper helper = null;
  31.     public static CacheHelper init(Context context){
  32.         if (helper==null) {
  33.             helper = new CacheHelper(context);
  34.         }
  35.         return helper;
  36.     }
  37.      
  38.     /**储存缓存json*/
  39.     public void setJson(final String url0,final String json){
  40.         new Thread(){
  41.             public void run() {
  42.                 String url = urlEncode(url0);
  43.                 ContentValues cv = new ContentValues();
  44.                 cv.put(URL, url);
  45.                 cv.put(JSON, json);
  46.                 cv.put(DATE, System.currentTimeMillis());
  47.                 helper.getReadableDatabase().delete(tableName, URL+"=?", new String[]{url});
  48.                 helper.getReadableDatabase().insert(tableName, null, cv);
  49.             }
  50.         }.start();
  51.     }
  52.      
  53.     /**获取缓存json,以handler的obj返回(懒得写监听器了)*/
  54.     public void getJson(final String url0,final Handler handler){
  55.         new Thread(){
  56.             public void run() {
  57.                 String url = urlEncode(url0);
  58.                 String result = null;
  59.                 Cursor c =
  60.                 helper.getReadableDatabase().query(tableName,
  61.                         null,
  62.                         URL+"=?",
  63.                         new String[]{url},
  64.                         null,
  65.                         null,
  66.                         null);
  67.                 if (c.moveToNext()) {
  68.                     result = c.getString(c.getColumnIndex(JSON));
  69.                 }
  70.                 Message msg = Message.obtain();
  71.                 msg.obj = result;
  72.                 handler.sendMessage(msg);
  73.             }
  74.         }.start();
  75.     }
  76.      
  77.     /**缓存需要定时清空*/
  78.     public void clear(){
  79.         new Thread(){
  80.             public void run() {
  81.                 helper.getReadableDatabase().delete(tableName, "ID>?", new String[]{"0"});
  82.             }
  83.         }.start();
  84.     }
  85.      
  86.     /**url需要去掉token*/
  87.     private String urlEncode(String url){
  88.         String result = url.replaceAll("accessToken.*?\\&", "");
  89.         if (result.contains("accessToken")) {//如果还没去掉,说明是在尾部
  90.             result = result.replaceAll("\\&accessToken.*?$", "");
  91.         }
  92.         return result;
  93.     }

  94. }
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP