【问题标题】:unable to load image from gallery无法从图库加载图像
【发布时间】:2016-10-12 19:55:08
【问题描述】:

当我打开我的画廊以选择我在展览中的照片时。我得到了以下错误。它返回null。 这是我扩展 ListActivity 的幻灯片:

  public static Bitmap getThumbnail(Uri uri, ContentResolver cr, 
      BitmapFactory.Options options)
     {
        int id = Integer.parseInt(uri.getLastPathSegment());

      Bitmap bitmap = MediaStore.Images.Thumbnails.getThumbnail(cr, id, 
         MediaStore.Images.Thumbnails.MICRO_KIND, options);         

      return bitmap;
   }

这里在另一个 SlideshowEditor 中扩展了 ListActivity:

    private class LoadThumbnailTask extends AsyncTask<Object,Object,Bitmap>
       {
  ImageView imageView; // displays the thumbnail

  // load thumbnail: ImageView, MediaType and Uri as args
  @Override
  protected Bitmap doInBackground(Object... params)
  {
     imageView = (ImageView) params[0];

     return Slideshow.getThumbnail((Uri) params[1], 
        getContentResolver(), new BitmapFactory.Options());
  } // end method doInBackground

  // set thumbnail on ListView
  @Override
  protected void onPostExecute(Bitmap result)
  {
     super.onPostExecute(result);
     imageView.setImageBitmap(result);
  } // end method onPostExecute  
   }

protected Bitmap doInBackground(Object... params)
  {
     imageView = (ImageView) params[0];

     return Slideshow.getThumbnail((Uri) params[1], 
        getContentResolver(), new BitmapFactory.Options());
  } 

我的日志猫:

执行 doInBackground() 时发生错误 在 android.os.AsyncTask$3.done(AsyncTask.java:300) 在 java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355) 在 java.util.concurrent.FutureTask.setException(FutureTask.java:222) 在 java.util.concurrent.FutureTask.run(FutureTask.java:242) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) 在 java.lang.Thread.run(Thread.java:841) 引起:java.lang.NumberFormatException: Invalid int: "image:54305" 在 java.lang.Integer.invalidInt(Integer.java:137) 在 java.lang.Integer.parse(Integer.java:374) 在 java.lang.Integer.parseInt(Integer.java:365) 在 java.lang.Integer.parseInt(Integer.java:331) 在 com.harshadjadav.slideshow.Slideshow.getThumbnail(Slideshow.java:328) 在 com.harshadjadav.slideshow.SlideshowEditor$LoadThumbnailTask​​.doInBackground(SlideshowEditor.java:225) 在 com.harshadjadav.slideshow.SlideshowEditor$LoadThumbnailTask​​.doInBackground(SlideshowEditor.java:215) 在 android.os.AsyncTask$2.call(AsyncTask.java:288) 在 java.util.concurrent.FutureTask.run(FutureTask.java:237) 在

java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)

【问题讨论】:

标签: java android numberformatexception


【解决方案1】:

在您的 getThumbnail() 方法中,Uri.getLastPathSegment() 将返回 String,因此您收到此错误,您正在尝试将 String 对象解析为 int

您可以将方法更新为

public static Bitmap getThumbnail(ContentResolver cr, String path) throws Exception { Cursor ca = cr.query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, new String[] { MediaStore.MediaColumns._ID }, MediaStore.MediaColumns.DATA + "=?", new String[] {path}, null); if (ca != null && ca.moveToFirst()) { int id = ca.getInt(ca.getColumnIndex(MediaStore.MediaColumns._ID)); ca.close(); return MediaStore.Images.Thumbnails.getThumbnail(cr, id, MediaStore.Images.Thumbnails.MICRO_KIND, null ); } ca.close(); return null; }

并且可以像这样调用

getThumbnail(getContentResolver, uri.tostring)

【讨论】:

  • 我看不懂:-((((((
  • 你能帮我写一下吗。
  • 我在哪里调用此代码 getThumbnail(getContentResolver, uri.tostring) 我调用它时出错
  • 我不能将此方法称为我的 dobackground 方法
猜你喜欢
  • 2012-07-10
  • 2023-03-17
  • 1970-01-01
  • 2015-07-25
  • 2018-04-05
  • 2013-01-11
  • 2012-06-30
  • 1970-01-01
相关资源
最近更新 更多