ArrayIndexOutOfBoundsException:length = 20;当从微调器中选择项目时,index = 20

时间:2013-06-06 09:14:29

标签: java android arrays arraylist android-spinner

当我第一次从微调器中选择时,当第二次选择时,每件事情都很好 但之后从中选择时,它会显示错误

E / AndroidRuntime(10594):java.lang.ArrayIndexOutOfBoundsException:length = 20;指数= 20

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

for(........
s.add(e.child(2).text());
                                    }

public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) {
    try{
        editPrice.setText(""+Splash.s.get(pos));
    }catch (Exception e) {
        Toast.makeText(parent.getContext(),"The country is "+pos, Toast.LENGTH_LONG).show();
    }
}

4 个答案:

答案 0 :(得分:2)

Java索引从0开始。因此,如果数组具有 20 元素,则其索引从 0 19

以String String数字为例:

Values:   A, B, C, D, E     -    length: 5
Indexes:  0, 1, 2, 3, 4

String valueInFIRSTposition= stringArray.get(0); //stringArray[0] for arrays
String valueInSECONDposition= stringArray.get(1); //stringArray[1] for arrays
...
String valueInLASTposition= stringArray.get(stringArray.size()-1); //stringArray[stringArray.length-1] for array

因此,如果你想获取例如“C”,你将获取带有数字2的索引:

String valueInThirdPosition= stringArray.get(2); //stringArray[2] for arrays

此外,在编写迭代数组的 for循环时,它看起来像这样:

for (int i=0; i<array.size(); i++) {
    Object value= array.get(i);
}

第一个索引 0 ,以获取数组的第一个元素。在for循环的中间部分(i<array.size(0)),这是表示 WHEN 的条件,for循环结束,你会看到它结束 BEFORE 最后一个索引 - 由于上述原因。

答案 1 :(得分:0)

错误在于您正在尝试访问仅包含20个元素的数组的第21个元素(索引20)。

您必须更正您的代码,以便不会发生这种情况。

答案 2 :(得分:0)

查看http://developer.android.com/guide/topics/ui/controls/spinner.html#SelectListener

您应该使用parent.getItemAtPosition(pos)来检索您的数据。

答案 3 :(得分:0)

Here is sample example for spinner

final Spinner spinner = (Spinner) findViewById(R.id.spinner_experience);
        ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(
                this, R.array.experience_array, android.R.layout.simple_spinner_item);
        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        spinner.setAdapter(adapter);


        spinner.setOnItemSelectedListener(new OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> parentView, View selectedItemView, int position, long id) {
                Object test = spinner.getSelectedItem();
                Toast.makeText(AlbumsActivity.this, "The planet is " +
                        spinner.getItemAtPosition(position).toString(), Toast.LENGTH_LONG).show();
            }

            @Override
            public void onNothingSelected(AdapterView<?> parentView) {
                // your code here
            }

        });