簡體   English   中英

如何從內部方法向ArrayList添加值?

[英]How can I add a value to an ArrayList from an inner method?

我目前正在嘗試從另一個類內部的方法向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對象中的ArrayClass 但是,當我啟動應用程序時,它不會將值添加到對象中。 我習慣於使用python全局變量,而不必處理java的語義,因此,如果您可以對需要進行哪些更改有所了解,我將不勝感激。

除了針對您所面臨問題的其他給定答案/解決方案之外,讓我分享一種最佳且優化的方法來在Android中實現JSON解析。

我建議您檢查GSONJackson庫,它們提供了Java序列化/反序列化功能,可以將Java對象轉換為JSON並反過來

它確實提供了一些好處,其中一個主要好處是您不需要手動實施解析,並且在實施解析時出錯的機會更少,例如您在提及關鍵的“成功”或“成功”或任何此類錯誤時可能會犯錯愚蠢的錯誤!

首先,由於您的變量是靜態的,並且方法也是靜態的,因此您不必實例化該對象。 您可以執行以下操作:

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());

刪除ArrayClass中所有static關鍵字的情況。 靜態方法是類級別的方法,即。 是在類本身而不是類的實例上調用的。

您也可以嘗試使用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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM