我尝试通过以下方式将JSONObject添加到JSONArray中:
JSONObject jsonObject = new JSONObject();
try {
jsonObject.put("strefa", strefa);
jsonObject.put("adres", adres);
jsonObject.put("kryteria", kryteria);
jsonObject.put("telefon", telefon);
jsonObject.put("data", data);
} catch (Exception e) {
e.printStackTrace();
}
GlobalConfig config = new GlobalConfig();
config.addJSONObject(jsonObject);
并以这种方式获得这个JSONArray:
GlobalConfig config = new GlobalConfig();
JSONArray jsonArray = config.getJSONArray();
下面是我的GlobalConfig:
public class GlobalConfig {
JSONArray JsonArray = new JSONArray();
public JSONArray getJSONArray() {
return JsonArray;
}
public void addJSONObject(JSONObject jsonObject) {
JsonArray.put(jsonObject);
}
出了问题。例如,我尝试取这个数组的长度,结果得到的大小为0。如何返回JSONArray?
这将创建新的对象
GlobalConfig config = new GlobalConfig();
结果生成一个新数组。。试试这个方法:
GlobalConfig config = new GlobalConfig();
config.addJSONObject(jsonObject);
JSONArray jsonArray = config.getJSONArray();
因此,忽略整个"to json or not to json"问题,您的问题似乎本质上是"我如何创建单例"。。
有很多方法可以实现单例模式,但据我所知,对您来说最方便的两种方法是:
- 使用应用程序对象保存GlobalConfig对象
- 实现一个"经典"的java单例
两者都有优点和缺点;我不打算讨论实现自定义应用程序对象的细节,你可以在这里找到如何做到这一点:Android应用程序对象
您可以实现这样一个"经典"的java单例:
public class GlobalConfig {
private JSONArray JsonArray = new JSONArray();
// This holds our shared instance of GlobalConfig
private static GlobalConfig staticInstance;
// Declare a private constructor to prevent accidentally using "new GlobalConfig"
private GlobalConfig() {};
// Use GlobalConfig.getInstance() to get your GlobalConfig
public static GlobalConfig getInstance() {
// We create a new instance only on the first use of getInstance
if (staticInstance == null) {
staticInstance = new GlobalConfig();
}
// Always return the same instance.. singleton!
return staticInstance;
}
public JSONArray getJSONArray() {
return JsonArray;
}
public void addJSONObject(JSONObject jsonObject) {
JsonArray.put(jsonObject);
}
因此,每当您需要访问GlobalConfig对象时,请使用
GlobalConfig config = GlobalConfig.getInstance()
或者,如果你愿意,你可以做一些类似的事情:
JSONArray jsonArray = GlobalConfig.getInstance().getJSONArray();
它的关键是有一个GlobalConfig的静态实例(singleton),它总是由GlobalConfig.getInstance()返回,这使它可以访问任何活动等。本质上,它是一个全局变量。。然而这也意味着它可能很难发布,并且可能在dalvik VM的整个使用寿命内存在(甚至在您的应用程序发布之间;请注意…)
希望这能有所帮助。