从照片库中检索照片

问题描述:

我发现了这段代码,并试图在我的应用程序中实现,它打开画廊,让我选择一张照片,然后应用程序停止工作并关闭。从照片库中检索照片

这是我第一次尝试上传图像到mysql,我一开始就卡住了。

buttonChoose.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) 
      { 
       showFileChooser(); 
      } 
     }); 

private void showFileChooser() { 
     Intent intent = new Intent(); 
     intent.setType("image/*"); 
     intent.setAction(Intent.ACTION_GET_CONTENT); 
     startActivityForResult(Intent.createChooser(intent, "Select Picture"), PICK_IMAGE_REQUEST); 
    } 




@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 

    if (requestCode == PICK_IMAGE_REQUEST && resultCode == RESULT_OK && data != null && data.getData() != null) 
    { 
     Uri filePath = data.getData(); 

     try 
     { 
      bitmap = MediaStore.Images.Media.getBitmap(MainActivity.this.getContentResolver(), filePath); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
     imageView.setImageBitmap(bitmap); 
    } 
} 

Uri filePath = data.getData(); 

这将是毫无意义的大多数Uri值。

Uri填充ImageView的最佳解决方案是使用a third-party image loading library,如Picasso

如果你坚持说,这样做你自己,你将需要fork一个后台线程,使用ContentResolveropenInputStream()获得由Uri支持内容的InputStream,使用BitmapFactorydecodeStream()获得Bitmap,然后(上主应用程序线程)使用Bitmap更新ImageView

+0

应该这样做吗? Uri imageUri = data.getData(); Picasso.with(this).load(imageUri).into(imageView); – jack

+0

@jack:是的,看起来不错,假设'this'是你的'Activity'。这将处理在后台线程中加载图像并将其放入你的'ImageView'中。毕加索还有许多其他的配置选项(例如缩放控制),以防您需要它们。 – CommonsWare

+0

好吧,应用程序停止崩溃,但没有任何显示在imageView .... imageuri =“内容://媒体/外部/图像/媒体/ 182”......听起来没错吗? – jack