【问题标题】:How can I add a value to an ArrayList from an inner method?如何从内部方法向 ArrayList 添加值?
【发布时间】:2016-05-03 03:45:05
【问题描述】:

我目前正在尝试从另一个类中的方法向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 的语义,所以如果你能阐明需要进行哪些更改,我将不胜感激。

【问题讨论】:

  • 你怎么知道没有添加这些值?您是否将它们加载到某个地方?
  • @Kayne Khoury 它工作正常,我检查了我的代码。填充的字符串可能有问题。尝试使用日志打印
  • @varunkr 我试图在活动启动时在 toast 中显示对象的长度,结果显示为零,所以我假设没有添加任何值。

标签: java android object arraylist


【解决方案1】:

除了您所面临问题的其他给出答案/解决方案之外,让我分享一个在 Android 中实现 JSON 解析的最佳和优化方法。

我建议您检查 GSONJackson 库,它们提供 Java 序列化/反序列化,可以将 Java 对象转换为 JSON 并返回。

它确实提供了一些好处,其中一个主要好处是您不需要手动实现解析,并且在实现解析时出错的机会更少,例如您可能会在提及关键“成功”或“成功”时出错或任何此类愚蠢的错误!

【讨论】:

    【解决方案2】:

    首先,由于您的变量是静态的,并且方法也是静态的,因此您不必实例化对象。你可以这样做:

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

    【讨论】:

    • 你的方法奏效了。值正在增加,我可以看到显示的值。另外,我在错误的地方检查对象的大小。我没有考虑到需要时间来获取响应并填充对象。我立即检查了尺寸。非常感谢您的帮助。
    【解决方案3】:

    删除 ArrayClass 中 static 关键字的所有大小写。静态方法是类级别的方法,即。在类本身上调用,而不是在类的实例上调用。

    【讨论】:

      【解决方案4】:

      你也可以试试这个,对于 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)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2022-01-02
        • 1970-01-01
        • 2016-02-21
        • 2021-06-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多