2016-01-01 7 views
1

я пытаюсь добавить JSONObject к JSONArray таким образом:Как добавить и получить значение из 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?

+0

Используйте намерения для передачи данных. Это было бы проще. –

+0

Я не могу, потому что мне нужно иметь доступ к любой деятельности и Службе. – SeaDog

ответ

0

это создает новый объект

GlobalConfig config = new GlobalConfig();

результаты делают новый массив .. попробовать этот способ:

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

Я хочу иметь пустой массив, к которому у меня есть доступ из любой активности. Он должен быть глобальным массивом, таким как глобальная переменная. В первом действии create is jsonobject, который добавляется в массив, и в другой деятельности я хочу получить этот объект. Это не решает мою проблему. – SeaDog

+0

ОК, я знаю. Мне пришлось использовать статический тип переменной: private static JSONArray JsonArray = new JSONArray(); решил мою проблему. – SeaDog

0

Таким образом, игнорируя весь "в формате JSON или не JSon" вопрос , ваша проблема, по-видимому, в основном «как создать одноэлементный».

Существует множество способов реализовать одноэлементный p attern, но два, которые, вероятно, будут наиболее удобным для вас от того, что я могу понять вашей ситуации являются:

  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 (singleton), который всегда возвращается GlobalConfig.getInstance(), который делает его доступным для любой активности и т. Д. По сути, это глобальная переменная. Однако. Это также означает, что его может быть сложно освободить и может существовать на протяжении всей жизни dalvik VM (даже между запусками вашего приложения, следите за этим).

Надеюсь, это поможет.

Смежные вопросы