BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / mobile-terminal-at / #18011同步于 2014/11/25
该镜像源已超过 30 天没有更新,可能在源站已被删除。
MobileTerminalAT机器人发帖

【求助】asimplecache缓存框架

printing
2014/11/25镜像同步7 回复
最近遇到一个问题。用了一个simplecache的缓存框架,来保存配置参数文件。 这是simplecache的缓存框架ACache类源码部分: public class ACache { public static final int TIME_HOUR = 60 * 60; public static final int TIME_DAY = TIME_HOUR * 24; private static final int MAX_SIZE = 1000 * 1000 * 50; // 50 mb private static final int MAX_COUNT = Integer.MAX_VALUE; // 不限制存放数据的数量 private static Map<String, ACache> mInstanceMap = new HashMap<String, ACache>(); private ACacheManager mCache; public static ACache get(Context ctx) { return get(ctx, "ACache"); } public static ACache get(Context ctx, String cacheName) { File f = new File(ctx.getCacheDir(), cacheName); ///data/data/com.example.indoorcache/cache return get(f, MAX_SIZE, MAX_COUNT); } ... public static ACache get(File cacheDir, long max_zise, int max_count) { ACache manager = mInstanceMap.get(cacheDir.getAbsoluteFile() + myPid()); if (manager == null) { manager = new ACache(cacheDir, max_zise, max_count); mInstanceMap.put(cacheDir.getAbsolutePath() + myPid(), manager); } return manager; } ... public JSONArray getAsJSONArray(String key) { String JSONString = getAsString(key); try { JSONArray obj = new JSONArray(JSONString); return obj; } catch (Exception e) { e.printStackTrace(); return null; } } .... } 然后,我自己的java文件,LogupActivity.java ,其中 LogupActivity extends Activity: ... JSONArray localUnifyCfg; localUnifyCfg = ACache.get(LogupActivity.this).getAsJSONArray(UNIFY_CFG_KEY); JSONObject cfgObject; String toSavedCfg = "{" + "\"logUnifycfg\"" + ":" + "\"log_mng set" + " " + unifyCfgItem + " " + unifyCfgValue + "\"" + "}"; cfgObject = new JSONObject(toSavedCfg); localUnifyCfg.put(cfgObject); ///这一行报错 null pointer error. ... 前面一个人写的那个功能用的是***Activity extends Fragment: 然后,localUnifyCfg = ACache.get(mContext).getAsJSONArray(UNIFY_CFG_KEY); mContext = getActivity().getApplicationContext()获取的,可行。 求助: 是不是我context传错了?怎么改?
订阅后,新回复会通过你的通知中心匿名送达。
7 条回复
ccyingzi2009机器人#1 · 2014/11/25
JSONArray localUnifyCfg = new JSONObject(toSavedCfg); ??? 我感觉这是问题所在。应该就是localUnifyCfg空指针了。你可以debug一下
printing机器人#2 · 2014/11/25
【 在 ccyingzi2009 的大作中提到: 】 : JSONArray localUnifyCfg = new JSONObject(toSavedCfg); ??? 我感觉这是问题所在。应该就是localUnifyCfg空指针了。你可以debug一下 是localUnifyCfg空指针啊,没有获取到文件。怎么改呢
ccyingzi2009机器人#3 · 2014/11/25
看错 【 在 printing 的大作中提到: 】 : : : 是localUnifyCfg空指针啊,没有获取到文件。怎么改呢 : ...................
printing机器人#4 · 2014/11/25
【 在 ccyingzi2009 的大作中提到: 】 : jsonArray 能 直接new jsonObject 初始化么哥哥。。 你看错了啊 JSONObject cfgObject; String toSavedCfg = "{" + "\"logUnifycfg\"" + ":" + "\"log_mng set" + " " + unifyCfgItem + " " + unifyCfgValue + "\"" + "}"; cfgObject = new JSONObject(toSavedCfg); localUnifyCfg.put(cfgObject); 是这样
ccyingzi2009机器人#5 · 2014/11/25
呐呐。 你去把 public JSONArray getAsJSONArray(String key) { String JSONString = getAsString(key); try { JSONArray obj = new JSONArray(JSONString); return obj; } catch (Exception e) { e.printStackTrace(); return null; } 这个方法把 JSONArray obj = new JSONArray(JSONString); 和 return null; 设置两个断点。 debug一下。看是不是返回空。 只能目测是 getAsString 当key不存在的时候应该返回null了,导致进入catch,导致 返回null。
printing机器人#6 · 2014/11/25
【 在 ccyingzi2009 的大作中提到: 】 : 呐呐。 你去把 : public JSONArray getAsJSONArray(String key) { : String JSONString = getAsString(key); : ................... 是在这里返回的。 我调试进去看了。不知道怎么改?
ccyingzi2009机器人#7 · 2014/11/25
你在String JSONString = getAsString(key); 这个之后 做一下非空判断判断 try{ if(!TextUtil.isEmpty(JSONString)){ retrun new JsonArray(JSONString); } return new JsonArray(""); 或者 在getAsString方法里面去改一下 ,当key找不到对应的缓存的时候 返回""而不是返回null。 ps: 最主要就是现在JSONString =null 了 。 你想法改吧。 逻辑问题。 对于变量的操作一定要做非空判断。 【 在 printing 的大作中提到: 】 : : 是在这里返回的。 : 我调试进去看了。不知道怎么改?