android数组索引异常

android数组索引异常,android,arrays,Android,Arrays,我有一个包含imageview和gridview的活动。规则是,当我在gridview上单击所选图像时,它将由imageview预览。然后,可以单击imageview,它将显示在对话框中。问题是,当我单击imageview时,图像与gridview中所选图像不匹配。这是我的代码 public class GalleryActivity extends Activity { ImageView imgviewThumb, imgviewPreviewDialog; public int[] im

我有一个包含imageview和gridview的活动。规则是,当我在gridview上单击所选图像时,它将由imageview预览。然后,可以单击imageview,它将显示在对话框中。问题是,当我单击imageview时,图像与gridview中所选图像不匹配。这是我的代码

public class GalleryActivity extends Activity {

ImageView imgviewThumb, imgviewPreviewDialog;
public int[] imageResto = {
        R.drawable.img1,
        R.drawable.img2,
        R.drawable.img3,
        R.drawable.img4,
        R.drawable.img5,
        R.drawable.img1,
        R.drawable.img2,
        R.drawable.img3,
        R.drawable.img4
};
int position ;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_gallery);

    imgviewThumb = (ImageView)findViewById(R.id.imgview_preview);
    imgviewThumb.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            Dialog dialog = new Dialog(GalleryActivity.this);
            dialog.setCancelable(true);
            dialog.setContentView(R.layout.dialog_previewimage);
            imgviewPreviewDialog = (ImageView) dialog.findViewById(R.id.imgview_preview_dialog);
            imgviewPreviewDialog.setImageResource(imageResto[position]);
            dialog.show();
        }
    });

    GridView gView = (GridView) findViewById(R.id.grid_View);

    //Instantiating ImageAdapter class
    gView.setAdapter(new ImageAdapter(this));

    /*showing full image on clicking the thumbnail
     * create a new class named FullImage.java 
     */
    gView.setOnItemClickListener(new OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position,
                long id) {
            imgviewThumb.setImageResource(imageResto[position]);
        }
    });
}

public class ImageAdapter extends BaseAdapter {
    public ImageAdapter(Context c) {
        mContext = c;
    }

    public int getCount() {
        return mThumbIds.length;
    }

    public Object getItem(int position) {
        return position;
    }

    public long getItemId(int position) {
        return position;
    }

    public View getView(int position, View convertView, ViewGroup parent) {
        ImageView imageView;
        if (convertView == null) {
            imageView = new ImageView(mContext);
            imageView.setLayoutParams(new GridView.LayoutParams(140, 140));
            imageView.setAdjustViewBounds(false);
            imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
        } else {
            imageView = (ImageView) convertView;
        }

        imageView.setImageResource(mThumbIds[position]);

        return imageView;
    }

    private Context mContext;

    // images in array
    public Integer[] mThumbIds = {
             R.drawable.thumb1_e,
             R.drawable.thumb2,
             R.drawable.thumb3,
             R.drawable.thumb4,
             R.drawable.thumb5,
             R.drawable.thumb1,
             R.drawable.thumb2,
             R.drawable.thumb3,
             R.drawable.thumb4
    };
}
}
公共类GalleryActivity扩展活动{
ImageView imgviewThumb、imgviewPreviewDialog;
public int[]imageResto={
R.drawable.img1,
R.drawable.img2,
R.drawable.img3,
R.drawable.img4,
R.drawable.img5,
R.drawable.img1,
R.drawable.img2,
R.drawable.img3,
R.drawable.img4
};
内部位置;
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_gallery);
imgviewThumb=(ImageView)findViewById(R.id.imgview\u预览);
imgviewThumb.setOnClickListener(新的OnClickListener(){
@凌驾
公共void onClick(视图v){
//TODO自动生成的方法存根
Dialog=新建对话框(GalleryActivity.this);
对话框。可设置可取消(true);
对话框.setContentView(R.layout.dialog\u预览图像);
imgviewPreviewDialog=(ImageView)dialog.findViewById(R.id.imgview\u preview\u dialog);
imgviewPreviewDialog.setImageResource(imageResto[position]);
dialog.show();
}
});
GridView gView=(GridView)findViewById(R.id.grid\u视图);
//实例化ImageAdapter类
gView.setAdapter(新的ImageAdapter(this));
/*单击缩略图时显示完整图像
*创建一个名为FullImage.java的新类
*/
gView.setOnItemClickListener(新的OnItemClickListener(){
@凌驾
public void onItemClick(AdapterView父视图、视图、整型位置、,
长id){
imgviewThumb.setImageResource(imageResto[位置]);
}
});
}
公共类ImageAdapter扩展了BaseAdapter{
公共图像适配器(上下文c){
mContext=c;
}
public int getCount(){
返回mThumbIds.length;
}
公共对象getItem(int位置){
返回位置;
}
公共长getItemId(int位置){
返回位置;
}
公共视图getView(int位置、视图转换视图、视图组父视图){
图像视图图像视图;
if(convertView==null){
imageView=新的imageView(mContext);
setLayoutParams(新的GridView.LayoutParams(140140));
imageView.setAdjustViewBounds(false);
imageView.setScaleType(imageView.ScaleType.CENTER\U裁剪);
}否则{
imageView=(imageView)convertView;
}
setImageResource(mThumbIds[position]);
返回图像视图;
}
私有上下文;
//阵列图像
公共整数[]mThumbIds={
R.drawable.thumb1_e,
R.drawable.2,
R.drawable.thumb3,
R.drawable.thumb4,
R.drawable.5,
R.drawable.1,
R.drawable.2,
R.drawable.thumb3,
R.drawable.thumb4
};
}
}
请纠正我的错误。谢谢您的帮助。

尝试更改:

public Object getItem(int position) {
        return position;
}
为此:

public Object getItem(int position) {
        return mThumbIds[position];
}

我认为您使用的是两个不同的数组,因此它可能不匹配

public int[] imageResto = {
        R.drawable.img1,
        R.drawable.img2,
        R.drawable.img3,
        R.drawable.img4,
        R.drawable.img5,
        R.drawable.img1,
        R.drawable.img2,
        R.drawable.img3,
        R.drawable.img4
};

  // images in array
    public Integer[] mThumbIds = {
             R.drawable.thumb1_e,
             R.drawable.thumb2,
             R.drawable.thumb3,
             R.drawable.thumb4,
             R.drawable.thumb5,
             R.drawable.thumb1,
             R.drawable.thumb2,
             R.drawable.thumb3,
             R.drawable.thumb4
    };
并放入有效的图像数组 位置在这里得到的值正好是apter中数组长度的0,所以它的写入位置在这里

 gView.setOnItemClickListener(new OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position,
                long id) {

            imgviewThumb.setImageResource(validImageArray[position]);
        }
    });

请张贴您的日志,谢谢!既然你有一个数组,为什么不扩展ArrayAdapter而不是BaseAdapter?@Remdroid日志显示有java.lang.ArrayIndexOutOfBoundsException:length=9;index=9。感谢您的建议:-)仍然不起作用。我的意思是,当对话框显示时,它将在网格上预览选定的图像。但感谢您的建议:-)到底是什么问题?它是否引发任何异常?我的意思是,当我运行并生成项目时,该图像未显示在对话框中,没有错误:-(当您单击列表中的项目时,它是否返回有效的数组索引值?我猜问题出在imgviewPreviewDialog.setImageResource(imageResto[positions])。因为setOnItemClick没有问题,所以图像已经与网格上的选定项匹配。我的意思是,当我单击该图像视图时,对话框将显示图像:-)logcat显示存在java.lang.ArrayIndexOutOfBoundsException:length=9;指数=9
 public View getView(int position, View convertView, ViewGroup parent) {
        ImageView imageView;
        if (convertView == null) {
            imageView = new ImageView(mContext);
            imageView.setLayoutParams(new GridView.LayoutParams(140, 140));
            imageView.setAdjustViewBounds(false);
            imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
        } else {
            imageView = (ImageView) convertView;
        }

        imageView.setImageResource(imageResto[position]);

        return imageView;
    }