【问题标题】:How to add and get value from JSONArray in another class如何在另一个类中从 JSONArray 添加和获取值
【发布时间】:2016-04-06 00:40:46
【问题描述】:

我尝试以这种方式将 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();

下面是我的全局配置:

   public class GlobalConfig {

   JSONArray JsonArray = new JSONArray();

   public JSONArray getJSONArray() {

       return JsonArray;
   }

   public void addJSONObject(JSONObject jsonObject) {

       JsonArray.put(jsonObject);

   }

出了点问题。例如,我尝试获取这个数组的长度,我收到大小为 0。我怎样才能返回 JSONArray?

【问题讨论】:

  • 使用意图传递数据。那会更容易。
  • 我不能,因为我需要访问任何活动和服务。

标签: android arrays return global-variables jsonobject


【解决方案1】:

所以,忽略整个“到 json 或不到 json”的问题,你的问题似乎本质上是“我如何创建一个单例”..

有很多方法可以实现单例模式,但根据我对您的情况的理解,可能对您最方便的两种方法是:

  1. 使用应用程序对象来保存您的 GlobalConfig 对象
  2. 实现“经典”java 单例

各有优劣;我不会详细介绍如何实现自定义应用程序对象,您可以在此处了解如何执行此操作:Android Application Object

您可以像这样实现“经典”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 的静态实例(单例),它总是由 GlobalConfig.getInstance() 返回,这使得它可以被任何活动等访问。本质上它是一个全局变量。但是。这也意味着它可能难以发布,并且可以在 dalvik VM 的整个生命周期中存在(即使在您的应用程序启动之间;当心..)

希望这会有所帮助。

【讨论】:

    【解决方案2】:

    这会创建一个新对象

    GlobalConfig config = new GlobalConfig();

    结果创建一个新数组.. 试试这个方法:

    GlobalConfig config = new GlobalConfig();
    config.addJSONObject(jsonObject);
    JSONArray jsonArray = config.getJSONArray();
    

    【讨论】:

    • 我想要一个空数组,我可以从任何活动中访问它。它必须是全局数组,如全局变量。在第一个活动中,创建的是 jsonobject,它被添加到数组中,而在其他活动中,我想得到这个对象。这不能解决我的问题。
    • 好的,我知道。我不得不使用静态类型的变量: private static JSONArray JsonArray = new JSONArray();解决了我的问题。
    猜你喜欢
    • 1970-01-01
    • 2019-08-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多