如何在另一个类中添加JSONArray并从中获取值



我尝试通过以下方式将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"问题,您的问题似乎本质上是"我如何创建单例"。。

有很多方法可以实现单例模式,但据我所知,对您来说最方便的两种方法是:

  1. 使用应用程序对象保存GlobalConfig对象
  2. 实现一个"经典"的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的整个使用寿命内存在(甚至在您的应用程序发布之间;请注意…)

希望这能有所帮助。

相关内容

  • 没有找到相关文章

最新更新