【问题标题】:Dynamically inserting string into a string array in Android在Android中将字符串动态插入字符串数组
【发布时间】:2011-10-19 18:41:32
【问题描述】:

我从服务器收到一些数据作为 JSON 响应。我提取了我需要的数据,我想把这些数据放到一个字符串数组中。我不知道数据的大小,所以我不能将数组声明为静态的。我声明一个动态字符串数组:

String[] xCoords = {};

之后我将数据插入到数组中:

   for (int i=0; i<jArray.length(); i++) {
         JSONObject json_data = jArray.getJSONObject(i);
         xCoords[i] = json_data.getString("xCoord");
   }

但我收到了

java.lang.ArrayIndexOutOfBoundsException
Caused by: java.lang.ArrayIndexOutOfBoundsException

在字符串数组中动态插入字符串的方法是什么?

【问题讨论】:

    标签: android dynamic arrays


    【解决方案1】:

    使用 ArrayList 虽然它不是真的需要,但只是学习它

    ArrayList<String> stringArrayList = new ArrayList<String>();
    
       for (int i=0; i<jArray.length(); i++) {
             JSONObject json_data = jArray.getJSONObject(i);
             stringArrayList.add(json_data.getString("xCoord")); //add to arraylist
       }
    
    //if you want your array
    String [] stringArray = stringArrayList.toArray(new String[stringArrayList.size()]);
    

    【讨论】:

    • 我也试过这个,但如果我只输入String [] xCoords = xCoordsList.toArray();,它会给我一个Type mismatch: cannot convert from Object[] to String[],所以我将线路转到String [] xCoords = (String[]) xCoordsList.toArray();,但这之后会显示08-04 11:54:24.462: ERROR/AndroidRuntime(1173): Caused by: java.lang.ClassCastException: [Ljava.lang.Object;错误。
    • 对不起,我编辑了答案.. 只需将 String cast 添加到最后一条语句(String[])
    • 这是我的观点 - 即使是编辑后的版本,应用程序也会停止(您必须强制关闭它)并且 LogCat 显示 java.lang.ClassCastException: [Ljava.lang.Object; Caused by: java.lang.ClassCastException: [Ljava.lang.Object;
    • 你确定你没有使用ngArrayList.add(json_data);??你必须使用ngArrayList.add(json_data.getString("xCoord"));我不认为你在使用我的代码
    • 是的,可以确定 - 这是我的代码:ArrayList&lt;String&gt; xCoordsArrayList = new ArrayList&lt;String&gt;(); String[] xCoords = {}; JSONArray jArray = new JSONArray(result); for (int i=0; i&lt;jArray.length(); i++) { JSONObject json_data = jArray.getJSONObject(i); xCoordsArrayList.add(json_data.getString("xCoord")); } xCoords = (String[]) xCoordsArrayList.toArray();
    【解决方案2】:

    这样试试

     String stringArray[];        
     stringArray=new String[jArray.length()];
     String xCoords[]=new String[jArray.length()];;
    
           for (int i=0; i<jArray.length(); i++) {
                 JSONObject json_data = jArray.getJSONObject(i);
                 xCoords[i] = json_data.getString("xCoord");
           }
    

    【讨论】:

    • 这在插入时有效,但是当我尝试使用for (int i=0; i&lt;xCoords.length; i++){ double xCoord = Double.parseDouble(xCoords[i]); }从中提取数据时,我收到08-04 11:40:30.435: ERROR/AndroidRuntime(1098): java.lang.NullPointerException。如何提取数据?
    • 检查 xCoords[i] 处的值。打印日志以查看值。是长度有问题还是只是因为 xCoords[i] 不是双精度值?
    • 问题出在长度上——如果我将for {} 的参数更改为for (int i=0; i&lt;10; i++),错误将移至下一行——double xCoord = Double.parseDouble(xCoords[i]);
    • 那么你的长度和 xCooords[i] 都有问题,它并不总是两倍
    【解决方案3】:

    Java 中的字符串数组有一个定义的大小,应该在声明时给出,以后不能通过添加或删除元素来更改它,并且动态数组的纯概念在 java 中不存在。 Read detailed article here...

    这是声明固定大小数组的正确方法。

            String[] myString = new String[5];
            fruits[0]="hello";
            fruits[1]="hello";
            fruits[2]="hello";
            fruits[3]="hello";
            fruits[4]="hello";

    相反,您可以使用列表来执行类似的任务。该列表是纯动态的,您可以在运行时添加多个值。 这是在 Android 中使用 JAVA 声明列表的正确方法。

       ArrayList<String> fruits = new ArrayList<String>();
            fruits.add("Value 1");
            fruits.add("Value 2");
            fruits.add("Value 3");
            fruits.add("Value 4");
            fruits.add("Value 5");
            fruits.add("Value 6");
            fruits.add("Value 7");
    // add as much values as per requirement
    // you can also use loops to add multiple values

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-12
      相关资源
      最近更新 更多