gpt4 book ai didi

android - ListView 中的 ArrayIndexOutOfBounds 异常

转载 作者:行者123 更新时间:2023-11-29 17:31:29 25 4
gpt4 key购买 nike

我有以下数组适配器:

public class SmsArrayAdapter extends ArrayAdapter<String> {

List<String> smsBody;
List<Boolean> Status;
List<String> time;
List<String> SmsMessageId;

Context context;
private static LayoutInflater inflater = null;
String fromNumber;

public SmsArrayAdapter(Context context, int resource, List<String> smsBody,
List<Boolean> Status, List<String> time, List<String> SmsMessageId,
String fromNumber) {
super(context, resource, smsBody);
this.smsBody = smsBody;
this.Status = Status;
this.context = context;
inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
this.fromNumber = fromNumber;
this.time = time;
this.SmsMessageId = SmsMessageId;
}

public String getStr(int position) {
return smsBody.get(position);
}

public String getId(int position) {
return SmsMessageId.get(position);
}

public void setRead(int position, String smsMessageId) {
Status.set(position, true);
ContentValues values = new ContentValues();
values.put("read", true);
context.getContentResolver().update(Uri.parse("content://sms/inbox"),
values, "_id=" + smsMessageId, null);
}

@Override
public int getCount() {
// TODO Auto-generated method stub
return super.getCount();
}

@Override
public String getItem(int position) {
// TODO Auto-generated method stub
return smsBody.get(position);
}

public static class ViewHolder {
public TextView textfrom;
public TextView text_sms;
public TextView text_time;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {

ViewHolder holder;
if (convertView == null) {

/****** Inflate tabitem.xml file for each row ( Defined below ) *******/
convertView = inflater.inflate(R.layout.row_item, null);

/****** View Holder Object to contain tabitem.xml file elements ******/

holder = new ViewHolder();

holder.textfrom = (TextView) convertView
.findViewById(R.id.textView_from);
holder.text_sms = (TextView) convertView
.findViewById(R.id.textView_sms);
holder.text_time = (TextView) convertView
.findViewById(R.id.textView_time);

/************ Set holder with LayoutInflater ************/
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}

holder.textfrom.setText(" " + fromNumber);

String smsTextToDisplay = smsBody.get(position);
if (smsTextToDisplay.length() > 100)
smsTextToDisplay = smsTextToDisplay.substring(0, 99) + " ...";

holder.text_sms.setText(smsTextToDisplay);

holder.text_time.setText(time.get(position));
if (Status.get(position) == false) {
convertView.setBackgroundColor(context.getResources().getColor(
R.color.light_blue_overlay));
}

return convertView;
}

}

但是当我使用这个 ListView 时,出现以下异常。

09-22 11:27:31.161: E/AndroidRuntime(12067): java.lang.IndexOutOfBoundsException: Invalid index 13, size is 13
09-22 11:27:31.161: E/AndroidRuntime(12067): at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:255)
09-22 11:27:31.161: E/AndroidRuntime(12067): at java.util.ArrayList.get(ArrayList.java:308)
09-22 11:27:31.161: E/AndroidRuntime(12067): at com.commlink.smscheck.SmsArrayAdapter.getView(SmsArrayAdapter.java:107)
09-22 11:27:31.161: E/AndroidRuntime(12067): at android.widget.AbsListView.obtainView(AbsListView.java:2300)
09-22 11:27:31.161: E/AndroidRuntime(12067): at android.widget.ListView.makeAndAddView(ListView.java:1816)
09-22 11:27:31.161: E/AndroidRuntime(12067): at android.widget.ListView.fillDown(ListView.java:698)
09-22 11:27:31.161: E/AndroidRuntime(12067): at android.widget.ListView.fillGap(ListView.java:662)
09-22 11:27:31.161: E/AndroidRuntime(12067): at android.widget.AbsListView.trackMotionScroll(AbsListView.java:5529)
09-22 11:27:31.161: E/AndroidRuntime(12067): at android.widget.AbsListView.scrollIfNeeded(AbsListView.java:3366)
09-22 11:27:31.161: E/AndroidRuntime(12067): at android.widget.AbsListView.onTouchMove(AbsListView.java:3802)
09-22 11:27:31.161: E/AndroidRuntime(12067): at android.widget.AbsListView.onTouchEvent(AbsListView.java:3597)
09-22 11:27:31.161: E/AndroidRuntime(12067): at android.view.View.dispatchTouchEvent(View.java:7790)
09-22 11:27:31.161: E/AndroidRuntime(12067): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2316)
09-22 11:27:31.161: E/AndroidRuntime(12067): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2013)
09-22 11:27:31.161: E/AndroidRuntime(12067): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2322)
09-22 11:27:31.161: E/AndroidRuntime(12067): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2027)
09-22 11:27:31.161: E/AndroidRuntime(12067): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2322)
09-22 11:27:31.161: E/AndroidRuntime(12067): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2027)
09-22 11:27:31.161: E/AndroidRuntime(12067): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2322)
09-22 11:27:31.161: E/AndroidRuntime(12067): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2027)
09-22 11:27:31.161: E/AndroidRuntime(12067): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2322)
09-22 11:27:31.161: E/AndroidRuntime(12067): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2027)
09-22 11:27:31.161: E/AndroidRuntime(12067): at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:2145)

为什么我会收到这个错误?我怎样才能避免这个错误?

最佳答案

不良做法

List<String> smsBody;
List<Boolean> Status;
List<String> time;
List<String> SmsMessageId;

最佳做法是管理不同的 ArrayList 以管理同一对象的数据。在进行添加或删除数据等操作时,您很难管理不同的 ArrayList。

例如,如果您想添加数据,则必须为每个列表中的相同索引添加数据。

管理 ArrayList 数据的最佳实践

最好的做法是管理具有用户定义对象的单个 ArrayList,例如ArrayList<SMSModel> .

其中 SMSModel 是一个模型类,它具有与 SMS 对象相关的所有属性,如 SMSBody、时间、SMS 消息等,并且该模型类将包含 getter/setter 方法以从对象获取和设置项目。

关于android - ListView 中的 ArrayIndexOutOfBounds 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32709044/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com