【问题标题】:Android ArrayIndexOutOfBoundsExeption When Viewing Image查看图像时的Android ArrayIndexOutOfBoundsExeption
【发布时间】:2013-04-14 01:19:35
【问题描述】:

我有一个简单的应用程序,当您单击 GridView 中的图像时,会弹出一个对话框,其中包含一个显示“视图”的按钮。当您单击按钮时,我想查看已在图库中单击的图像。当我让应用程序在没有对话框的情况下导航到图库时,我可以毫无问题地让它工作,但我需要它首先点击对话框。我的 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);
    }
  }); 
}

【问题讨论】:

  • 它是一个字符串数组。对不起,我会编辑
  • 为什么使用 View id 作为数组的索引?
  • 有更好的选择吗?我想如果视图正在抓取图像的 id,那么对话框就会知道显示它。
  • 您必须将该数组更改为图像路径,然后尝试,

标签: android arrays image dialog


【解决方案1】:

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

【讨论】:

  • 我把它移了下来,但它没有改变任何东西。我得到的错误在这一行:intent.setDataAndType(Uri.parse("file://" + arrPath[id]), "image/*");
【解决方案2】:

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

【讨论】:

  • 正确,我得到的错误在这一行:intent.setDataAndType(Uri.parse("file://" + arrPath[id]), "image/*");
  • 您如何确定视图的 id 应该是 arrPath 的索引?这就是你的问题所在。您正在使用数组中不存在的索引访问您的数组。您如何将图像放入此数组中?我认为您用来索引数组的 id 不会包含任何内容。
【解决方案3】:

尝试打印

arrPath[id]

你应该得到同样的错误。 正如 Sky Kelsey 所提到的,视图 id 作为数组的索引存在一些问题。

如果文件路径是例如

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

然后尝试不使用数组来保存路径,做点什么

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

【讨论】:

    【解决方案4】:

    我已经找出问题所在,并在问题上方发布了我的正确代码。感谢所有帮助过的人。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-09
      • 1970-01-01
      • 1970-01-01
      • 2011-08-03
      相关资源
      最近更新 更多