2016-05-03 6 views
0

В настоящее время я пытаюсь добавить значение к объекту ArrayList из метода внутри другого класса.Как добавить значение в ArrayList из внутреннего метода?

Вот класс я создал для ArrayList объекта:

public class ArrayClass { 

    public static ArrayList<String> array = new ArrayList<>(); 

    public static void add_val(String s){ 
     array.add(s); 
    } 

    public static int get_size(){ 
     return array.size(); 
    } 

    public static String get_val(int i){ 
     return array.get(i); 
    } 
} 

И другой класс, где я пытаюсь редактировать ArrayList объект:

ArrayClass fill = new ArrayClass(); 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_explore); 
    Response.Listener<String> responseListener4 = new Response.Listener<String>(){ 
     @Override 
     public void onResponse(String response) { 

      try { 
       JSONObject jsonResponse4 = new JSONObject(response); 
       boolean success = jsonResponse4.getBoolean("success"); 
       if (success){ 
        int l; 
        String filled; 
        int length4 = jsonResponse4.length(); 
        for (l=0;l<length4;l++){ 
         filled = jsonResponse4.getString(l+""); 
         fill.add_val(filled); 
        } 
       }else{ 
        AlertDialog.Builder builder = new AlertDialog.Builder(ExploreActivity.this); 
        builder.setMessage("Could not retrieve restaurant tables filled") 
          .setNegativeButton("Retry", null) 
          .create() 
          .show(); 
       } 
      } catch (JSONException e) { 
       e.printStackTrace(); 
      } 
     } 
    }; 
    FilledRequest filledRequest = new FilledRequest(responseListener4); 
    RequestQueue queue4 = Volley.newRequestQueue(ExploreActivity.this); 
    queue4.add(filledRequest); 

Если посмотреть в методе onResponse , вы можете увидеть попытку добавить значение из jsonResponse в объект ArrayClass. Однако, когда я запускаю свое приложение, оно не добавляет значение в объект. Я привык к глобальным переменным python и не должен разбираться в семантике java, поэтому, если вы можете пролить свет на то, какие изменения нужно сделать, я был бы очень признателен.

+0

Как вы знаете, что значения не добавляются? Вы загружаете их где-нибудь? – varunkr

+0

@ Kayne Khoury Его работа прекрасна, и я проверил с моим кодом. Может быть, проблема с вашей заполненной строкой. Попробуйте распечатать с помощью журнала – Srinivasan

+0

@varunkr Я пытался отобразить длину объекта в тосте, когда действие запускается, и оно приближалось к нулю, поэтому я не предполагал, что значения не добавляются. –

ответ

0

Во-первых, поскольку ваша переменная является статичной, а методы тоже статичны, вам не нужно создавать экземпляр объекта. Вы могли бы сделать что-то вроде этого:

ArrayClass.add_val("Hello"); 

Но если вы хотите создать экземпляр, то вы можете сделать это:

public class ArrayClass { 

    private ArrayList<String> array; 

    public ArrayClass() { 
     array = new ArrayList<>(); 
    } 

    public void add_val(String s){ 
     array.add(s); 
    } 

    public int get_size(){ 
     return array.size(); 
    } 

    public String get_val(int i){ 
     return array.get(i); 
    } 
} 

Для того, чтобы убедиться, что значения заполнены, вы можете проверить размер массива, как это :

for (l=0;l<length4;l++){ 
    filled = jsonResponse4.getString(l+""); 
    fill.add_val(filled); 
} 
Log.d("TEST", String.valueOf(fill.get_size()); 
+0

Ваш метод работал. Значения добавляются, и я могу видеть показанные значения. Кроме того, я проверял размер объекта в другом месте. Я не думал, что потребуется время, чтобы вернуть ответ и заполнить объект. Я сразу проверял размер. Большое спасибо за Вашу помощь. –

0

Удалить все случаи статического ключевого слова в ArrayClass. Статические методы - это методы уровня класса, т.е. вызываются самим классом, а не экземпляром класса.

2

Помимо других заданных ответов/решений проблемы, с которыми вы сталкиваетесь, позвольте мне поделиться лучшим и оптимизированным способом реализации JSON-анализа в Android.

Я предлагаю вам проверить библиотеки GSON или Jackson, которые предоставляют сериализацию/десериализацию Java, которые могут преобразовывать объекты Java в JSON и обратно.

Есть некоторые преимущества, которые он дает, одним из основных преимуществ является то, что вам не нужно выполнять парсинг вручную и меньше шансов на ошибки в реализации синтаксического анализа, например, вы можете ошибиться при упоминании ключа «Успех» или «Успех» «или любые такие глупые ошибки!

0

Вы также можете попробовать это, для ArrayList:

Во-первых сделать некоторые изменения в ваших ArrayClass. Используйте метод get And Set для доступа к вашему массиву.

public class ArrayClass { 
    private ArrayList<String> array = new ArrayList<>(); 
    public ArrayList<String> getArray() { 
     return array; 
    } 
    public void setArray(ArrayList<String> array) { 
     this.array = array; 
    } 

}

И ваш другой класс, где вы пытаетесь редактировать ArrayList использовать GetArray И SetArray метод и некоторые предопределенные метод ArrayList, как это:

хранить данные в ArrayList:

for (l=0;l<length4;l++){ 
     filled = jsonResponse4.getString(l+""); 
     fill.getArray().add(filled); 
    } 

Получить Размер ArrayList:

fill.getArray().size(); 

А также вы можете хранить другой ArrayList как

ArrayList<String> tempArrayList = new ArrayList<String>(); 
tempArrayList.add("string 1"); 
tempArrayList.add("string 2"); 
tempArrayList.add("string 3"); 
tempArrayList.add("string 4"); 

fill.setArray(tempArrayList) 
Смежные вопросы