您好我正在使用开发使用自定义列表视图的Android应用程序,但我不断收到java.lang.ArrayIndexOutOfBoundsException错误。但我无法在代码中发现任何错误,我可能会出错。
public class MainActivity extends Activity {
ListView lv_event;
List<HashMap<String, String>> alist;
String[] event_name = { "The Kampala City Festival",
"The Awakening (Lantern Meet of Poets Recital)" };
int[] event_img = { R.drawable.kla_festival, R.drawable.city_rooming };
String[] event_date = { "October 6th, 2013", "October 4th, 2013" };
String[] event_venue = { "Watoto Church, Central", "National Theatre" };
String[] event_time = { "11:30 am", "07:00 pm" };
String[] event_info = { "The #KampalaCityFestival will on Sunday 6th October",
"From the creators of Broken Voices of the Revolution "
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
setUI();
setEventList();
}
private void setEventList() {
// TODO Auto-generated method stub
try {
alist = new ArrayList<HashMap<String, String>>();
for (int i = 0; i < 3; i++) {
HashMap<String, String> hm = new HashMap<String, String>();
hm.put("event_picture", Integer.toString(event_img[i]));
hm.put("event_name", event_name[i]);
hm.put("event_date", event_date[i]);
hm.put("event_venue", event_venue[i]);
hm.put("event_time", event_time[i]);
hm.put("event_info", event_info[i]);
alist.add(hm);
}
// from
String[] from = { "event_picture", "event_name", "event_date",
"event_venue", "event_time", "event_info" };
// to
int[] to = { R.id.img_view_event, R.id.tv_event_name, R.id.tv_date,
R.id.tv_event_place, R.id.tv_time, R.id.tv_event_info };
SimpleAdapter adapter = new SimpleAdapter(getApplicationContext(),
alist, R.layout.lv_custom, from, to);
lv_event.setAdapter(adapter);
} catch (Exception e) {
// TODO Auto-generated catch block
Toast.makeText(getApplicationContext(), e.toString(),
Toast.LENGTH_LONG).show();
}
}
private void setUI() {
// TODO Auto-generated method stub
lv_event = (ListView) findViewById(R.id.lv_event);
}
答案 0 :(得分:0)
查看所有数组,for
需要更改
for (int i = 0; i < 2; i++) { // since there are only 2 elements in all your arrays.
数组的索引从0开始。因此,数组中的2个元素表示元素为arr [0]和arr [1]。 arr [2]会给你ArrayIndexOutOfBoundsException
。
答案 1 :(得分:0)
您的数组长度为2,而不是3。
从
更改你的for (int i = 0; i < 3; i++)
到
for (int i = 0; i < 2; i++)
-
array[0]; // first element
array[1]; // second element
array[2]; // out of bounds
答案 2 :(得分:0)
你试图迭代数组三次,期望每个数组中有三个元素。
但是在这里你只定义了两个值,例如:
String[] event_name = { "The Kampala City Festival",
"The Awakening (Lantern Meet of Poets Recital)" };
这可能是您获得ArrayIndexOutOfBoundsException
因此,如果您希望在数组中只有2个元素,或者将一个元素添加到只有2个值的数组中,请尝试将i < 3
更改为i < 2
。
答案 3 :(得分:0)
在类开头声明的数组只包含两个元素。然而,循环将尝试访问第三个元素。只需调整循环中的防护装置即可。
for (int i = 0; i < 2; i++) {
HashMap<String, String> hm = new HashMap<String, String>();
hm.put("event_picture", Integer.toString(event_img[i]));
hm.put("event_name", event_name[i]);
hm.put("event_date", event_date[i]);
hm.put("event_venue", event_venue[i]);
hm.put("event_time", event_time[i]);
hm.put("event_info", event_info[i]);
alist.add(hm);
}
答案 4 :(得分:0)
试试这个,
for (int i = 0; i < 3; i++) {
HashMap<String, String> hm = new HashMap<String, String>();
hm.put("event_picture", Integer.toString(event_img[i]));
hm.put("event_name", event_name[i]);
hm.put("event_date", event_date[i]);
hm.put("event_venue", event_venue[i]);
hm.put("event_time", event_time[i]);
hm.put("event_info", event_info[i]);
alist.add(hm);
}
更改此代码而非代码
for (int i = 0; i < 2; i++) {
HashMap<String, String> hm = new HashMap<String, String>();
hm.put("event_picture", Integer.toString(event_img[i]));
hm.put("event_name", event_name[i]);
hm.put("event_date", event_date[i]);
hm.put("event_venue", event_venue[i]);
hm.put("event_time", event_time[i]);
hm.put("event_info", event_info[i]);
alist.add(hm);
}
答案 5 :(得分:0)
只需更改
for (int i = 0; i < 3; i++)
至for (int i = 0; i < 2; i++)
或
for (int i = 0; i < event_name.length; i++)
就是这样
答案 6 :(得分:0)
使用foreach来避免这种异常。
新的foreach:
for (int i = 0; objectArray.Length()>i; i++) {
objectArray[i].doStuff();
}
旧的foreach:
size()
也许你必须对数组的长度使用不同的方法,例如spinner1 = (Spinner)rootView.findViewById(R.id.spinner1);
...