查看图像时的Android ArrayIndexOutOfBoundsExeption

时间:2013-04-14 01:19:35

标签: android arrays image dialog

我有一个简单的应用程序,当你点击GridView中的图像时,会弹出一个带有View的按钮。单击按钮时,我想查看已在图库中单击的图像。当我让应用程序在没有对话框的情况下导航到图库时,我可以毫无问题地使用它,但我需要它首先点击对话框。我的LogCat返回的错误Java.lang.ArrayIndexOutOfBoundsExeption。有什么想法,我需要做什么来观看图像?以下是我的代码。

public void onClick(View v) {
  Dialog dia = new Dialog(ViewGrid.this);
  dia.setContentView(R.layout.viewimage);
  dia.setTitle("What To Do?");
  dia.show(); 
  dia.setCancelable(true);
  Button button = (Button)dia.findViewById(R.id.viewImage);
  button.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
      int id = v.getId(); 
      Intent intent = new Intent();  
      intent.setAction(Intent.ACTION_VIEW);     
      intent.setDataAndType(Uri.parse("file://" + arrPath[id]), "image/*");
      startActivity(intent);
    }
  }); 
}

我收到了这一行的错误:

intent.setDataAndType(Uri.parse("file://" + arrPath[id]), "image/*");

我明白了!以下代码是工作代码。我需要将我从视图中获取的我的ID设置为点击图像,而不是点击“查看”按钮。谢谢大家的帮助!

public void onClick(final View viewIt) {
  Dialog dia = new Dialog(ViewGrid.this);
  dia.setContentView(R.layout.viewimage);
  dia.setTitle("What To Do?");
  dia.show(); 
  dia.setCancelable(true);
  Button button = (Button)dia.findViewById(R.id.viewImage);
  button.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
      int id = viewIt.getId(); 
      Intent intent = new Intent();  
      intent.setAction(Intent.ACTION_VIEW);     
      intent.setDataAndType(Uri.parse("file://" + arrPath[id]), "image/*");
      startActivity(intent);
    }
  }); 
}

4 个答案:

答案 0 :(得分:0)

不确定,但我认为应该在最后调用dia.show(); - 即在 view.setOnClickListener 之后。

答案 1 :(得分:0)

从哪里抛出此ArrayIndexOutOfBoundsException?我假设当你访问arrPath [i]时它被抛出。你怎么认为视图的id应该是arrPath的索引?这似乎是问题所在。

答案 2 :(得分:0)

尝试打印

arrPath[id]

你应该得到同样的错误。 正如Sky Kelsey所提到的,视图id是数组的索引有问题。

如果文件路径是例如

File file = new File("/sdcard/yourfile-VIEWID.jpg");

然后尝试而不是使用数组来保存路径,做一些事情

File file = new File("/sdcard/yourfile-"+String.valueof(id)+".jpg");

答案 3 :(得分:0)

我已经找到了问题,并在问题中将我的正确代码发布到了上面。谢谢所有帮助过的人。