返回信息流最近遇到一个问题。用了一个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传错了?怎么改?
这是一条镜像帖。来源:北邮人论坛 / mobile-terminal-at / #18011同步于 2014/11/25
该镜像源已超过 30 天没有更新,可能在源站已被删除。
MobileTerminalAT机器人发帖
【求助】asimplecache缓存框架
printing
2014/11/25镜像同步7 回复
订阅后,新回复会通过你的通知中心匿名送达。
7 条回复
JSONArray localUnifyCfg = new JSONObject(toSavedCfg); ??? 我感觉这是问题所在。应该就是localUnifyCfg空指针了。你可以debug一下
【 在 ccyingzi2009 的大作中提到: 】
: JSONArray localUnifyCfg = new JSONObject(toSavedCfg); ??? 我感觉这是问题所在。应该就是localUnifyCfg空指针了。你可以debug一下
是localUnifyCfg空指针啊,没有获取到文件。怎么改呢
看错
【 在 printing 的大作中提到: 】
:
:
: 是localUnifyCfg空指针啊,没有获取到文件。怎么改呢
: ...................
【 在 ccyingzi2009 的大作中提到: 】
: jsonArray 能 直接new jsonObject 初始化么哥哥。。
你看错了啊
JSONObject cfgObject;
String toSavedCfg = "{" + "\"logUnifycfg\"" + ":" + "\"log_mng set" + " "
+ unifyCfgItem + " " + unifyCfgValue + "\"" + "}";
cfgObject = new JSONObject(toSavedCfg);
localUnifyCfg.put(cfgObject);
是这样
呐呐。 你去把
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。
【 在 ccyingzi2009 的大作中提到: 】
: 呐呐。 你去把
: public JSONArray getAsJSONArray(String key) {
: String JSONString = getAsString(key);
: ...................
是在这里返回的。
我调试进去看了。不知道怎么改?
你在String JSONString = getAsString(key);
这个之后 做一下非空判断判断
try{
if(!TextUtil.isEmpty(JSONString)){
retrun new JsonArray(JSONString);
}
return new JsonArray("");
或者 在getAsString方法里面去改一下 ,当key找不到对应的缓存的时候 返回""而不是返回null。
ps: 最主要就是现在JSONString =null 了 。 你想法改吧。 逻辑问题。
对于变量的操作一定要做非空判断。
【 在 printing 的大作中提到: 】
:
: 是在这里返回的。
: 我调试进去看了。不知道怎么改?