Android 在列表视图中将数据库中的数据存储为数组时,索引是否超出了范围?

Android 在列表视图中将数据库中的数据存储为数组时,索引是否超出了范围?,android,listview,android-studio,Android,Listview,Android Studio,您好,我正在尝试将数据库中的数据存储为一个数组,然后我将使用它为myadapter创建一个定制的列表视图,但是我得到的索引超出了这个范围 下面是我从数据库中检索数据并将其存储为数组主活动的代码 int[] avatarImage = {R.mipmap.blademaster,R.mipmap.gunslinger,R.mipmap.pyro}; //i didnt store my image to my database because i dont know how to store a

您好,我正在尝试将数据库中的数据存储为一个数组,然后我将使用它为myadapter创建一个定制的列表视图,但是我得到的索引超出了这个范围

下面是我从数据库中检索数据并将其存储为数组主活动的代码

int[] avatarImage = {R.mipmap.blademaster,R.mipmap.gunslinger,R.mipmap.pyro}; 
//i didnt store my image to my database because i dont know how to store and retrieve it so i use manual array

List<Avatar>values = db.getAllAvatars();
        int countOfValues = values.size();
        String[] titles = new String[countOfValues];

        for (int i=0; i<=countOfValues; i++) {
            titles[i] = (String)values.get(i).getName();
        }

listView = (ListView) findViewById(R.id.avatarlv);

        MyAdapter myAdapter = new MyAdapter(MainActivity.this,titles,avatarImage);
        listView.setAdapter(myAdapter);
我的适配器java

public class MyAdapter extends ArrayAdapter<String> {

    String [] names;
    int [] avatarImage;
    Context mContext;

    public MyAdapter(Context context,String[] nama,int[] aImage) {
        super(context, R.layout.adapter_main);
        this.names = nama;
        this.avatarImage = aImage;
        this.mContext = context;
    }

    @Override
    public int getCount()
    {
        return names.length;
    }


    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder mViewHolder = new ViewHolder();
        if(convertView == null) {
            LayoutInflater mInflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            convertView = mInflater.inflate(R.layout.adapter_main, parent, false);
            mViewHolder.mAvatar = (ImageView) convertView.findViewById(R.id.imageView);
            mViewHolder.mName = (TextView) convertView.findViewById(R.id.textView);
            convertView.setTag(mViewHolder);
        }
        else {
            mViewHolder = (ViewHolder) convertView.getTag();
        }
        mViewHolder.mAvatar.setImageResource(avatarImage[position]);
        mViewHolder.mName.setText(names[position]);

        return convertView;
    }

    static class ViewHolder{
        ImageView mAvatar;
        TextView mName;
    }

}
但是当我运行它时java.lang.RuntimeException:无法启动活动ComponentInfo{com.example.gorila.sqlite\u grid\u view/com.example.gorila.AvatarShop.MainActivity}:java.lang.IndexOutOfBoundsException:无效索引4,大小为4


请帮助,谢谢。

您的this.avatarImage中有一个,您只有3个元素,但在getView中,您可以尝试使用此mViewHolder.mAvatar.setImageResourceavatarImage[位置];如果位置为4,则会产生IndexOutOfBoundsException

对于测试,只需注释该行并运行,它就可以正常工作

或者你可以这样做

mViewHolder.mAvatar.setImageResourceavatarImage[位置%avatarImage.length]

for (int i=0; i<countOfValues; i++)