0

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

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

4 回答 4

2

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

以这个字符串数组为例:

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))的中间部分,for 循环结束时,您会看到它在最后一个索引之前结束- 出于上述原因。

于 2013-06-06T09:19:50.747 回答
0

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

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

于 2013-06-06T09:18:12.333 回答
0

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

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

于 2013-06-06T09:28:32.527 回答
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
            }

        });
于 2013-06-06T09:52:31.007 回答