[编辑]
如果删除RolloParser中的getter,问题就解决了。但为什么 getter方法使类自动构造?
我有一个名为RolloParser
的课程,你可以在下面看到。我使用这个类来解析资产文件夹中的JSON文件。
问题是当我在我的应用程序类中检查此类不是null
时,我发现RolloParse
已经构建完毕。我想知道为什么?
第7行永远不会有效,但解析器对象不为空。
应用类方法
1- private RolloParser parser=null;
2- public RolloParser getRolloParser(){
3-
4- //in first run, parser object is not null ???
5-
6- if(parser == null){
7- parser = new RolloParser(mContext);
8- }
9-
10- return parser;
11- }
Parser Class
import java.io.IOException;
import java.util.HashMap;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import android.content.Context;
import android.util.Log;
public class RolloParser {
private String path ="www/android-device/rollo.json";
private String extension =".ttf";
private HashMap<String, String> iconMap;
private HashMap<String, String> fontMap;
public RolloParser(){
System.err.println();
}
public RolloParser(Context context) {
try {
iconMap = new HashMap<String, String>();
fontMap = new HashMap<String, String>();
JSONObject objTop;
try {
objTop = new JSONObject(AndroidUtils.ReadFromfile(path, context));
String fonts = objTop.getString("fonts");
JSONObject objFonts = new JSONObject(fonts);
JSONArray icons = objFonts.getJSONArray("icons");
JSONArray others = objFonts.getJSONArray("others");
for (int i = 0; i < icons.length(); i++) {
JSONObject objIcon = new JSONObject(others.get(i).toString());
iconMap.put(objIcon.get("family").toString(),objIcon.get("file").toString()+extension);
};
for (int i = 0; i < others.length(); i++) {
JSONObject objIcon = new JSONObject(others.get(i).toString());
fontMap.put(objIcon.get("family").toString(),objIcon.get("file").toString()+extension);
}
for (int i = 0; i < others.length(); i++) {
Log.d("json", others.get(i).toString());
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} catch (JSONException e) {
e.printStackTrace();
}
}
public HashMap<String, String> getIconMap() {
return iconMap;
}
public HashMap<String, String> getFontMap() {
return fontMap;
}
}
答案 0 :(得分:0)
你一定是在调用getRolloParser()方法进行初始化。要确保在getRolloParser中设置一个断点并检查解析器是否为null然后它会得到 初始化