arrayindexoutofboundsexception:长度=20;从微调器中选择项时索引=20

utugiqy6  于 2021-06-30  发布在  Java
关注(0)|答案(4)|浏览(330)

这个问题不太可能帮助任何未来的游客;它只与一个小的地理区域、一个特定的时刻或一个非常狭窄的情况有关,而这些情况通常不适用于互联网的全球受众。有关使此问题更广泛适用的帮助,请访问帮助中心。
7年前关门了。
当我第一次从微调器中选择时,每件事都是好的,当我第二次选择时,一切都是好的,但在那之后,当我从微调器中选择时,它显示了错误
e/androidruntime(10594):java.lang.arrayindexoutofboundsexception:长度=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();
    }
}
jdgnovmf

jdgnovmf1#

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
            }

        });
doinxwow

doinxwow2#

错误是您试图访问仅包含20个元素的数组的第21个元素(索引20)。
您必须更正代码,以免发生这种情况。

7cjasjjr

7cjasjjr3#

看看http://developer.android.com/guide/topics/ui/controls/spinner.html#selectlistener
你应该使用 parent.getItemAtPosition(pos) 检索数据。

fruv7luv

fruv7luv4#

java索引从0开始。因此,如果数组有20个元素,那么它的索引是从0到19。
以字符串数组为例:

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循环结束时,你会看到它在最后一个索引之前结束,这是一个条件,原因如上所述。

相关问题