java.lang.NullPointerException:接收图像SD卡路径时的uriString

时间:2015-09-15 15:43:15

标签: android

出现此错误的原因是什么:

 java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example/com.example.sqlfirst.AddImage}: java.lang.NullPointerException: uriString

错误指向我接收意图

的这一行
img.setImageURI(Uri.parse(imagePath ));

我正在尝试通过意图向另一个活动发送SD卡路径并将其转换为图像 这是代码:

这里在sd卡中发送图像的路径

public   void openGallery() {

        Intent intent = new Intent();
        intent.setType("image/*");
        intent.setAction(Intent.ACTION_GET_CONTENT);
        startActivityForResult(Intent.createChooser(intent, "Select Picture"), 1);

        // startActivityForResult(
          // Intent.createChooser(intent, "Complete action using"),2);
       }

   protected void onActivityResult(int requestCode, int resultCode, Intent data) {

           super.onActivityResult(requestCode, resultCode, data);

            if (requestCode == 1 && resultCode == RESULT_OK && data != null && data.getData() != null) {

   Bundle extras2 = data.getExtras();

                filePath = data.getData();
  Intent i = new Intent(this,
                        AddImage.class);
  i.putExtra("imagepath", filePath);
 startActivity(i);

这里我想收到图像的路径并减小图像的大小。

    String imagePath = getIntent().getStringExtra("imagePath");
    ImageView img=(ImageView) findViewById(R.id.imageView);
    img.setImageURI(Uri.parse(imagePath ));

    Bitmap bitmap = ((BitmapDrawable)img.getDrawable()).getBitmap();
    Bitmap out = Bitmap.createScaledBitmap(bitmap, 500, 500, false); 
    // bitmap is the image 
    ByteArrayOutputStream stream = new ByteArrayOutputStream();
   out.compress(Bitmap.CompressFormat.JPEG, 60, stream); 
   bitmap.recycle();

2 个答案:

答案 0 :(得分:2)

要正确使用路径,首先应该创建它以便存储它,您可以使用它然后删除它或使用您获得的结果中的数据。

以下是创建Uri的代码,将其传递给您的Intent。获得结果后,可以使用Uri包中的getPath将Uri传递给另一个类。

/**
         * Creating file uri to store image/video
         */
        public static Uri getOutputMediaFileUri() {
            return Uri.fromFile(getOutputMediaFile());
        }

    /**
     * returning image / video
     */
    private static File getOutputMediaFile() {

        // External sdcard location
        File mediaStorageDir = new File(
                Environment
                        .getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES),
                "YOUR DIRECTORY NAME");

        // Create the storage directory if it does not exist
        if (!mediaStorageDir.exists()) {
            if (!mediaStorageDir.mkdirs()) {
                Log.d("image upload", "Oops! Failed create "
                        + "YOUR DIRECTORY NAME" + " directory");
                return null;
            }
        }

        //TODO change naming
        // Create a media file name
        String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss",
                Locale.getDefault()).format(new Date());
        File mediaFile;
        mediaFile = new File(mediaStorageDir.getPath() + File.separator
                + "IMG_" + timeStamp + ".jpg");
        return mediaFile;
    }

编辑1:

要将文件转换为位图,您可以使用此代码,由@Nikhilreddy Gujjula在this question提供

BitmapFactory.Options options = new BitmapFactory.Options();
options.inPreferredConfig = Bitmap.Config.ARGB_8888;
Bitmap bitmap = BitmapFactory.decodeFile(photoPath, options);
selected_photo.setImageBitmap(bitmap);

答案 1 :(得分:1)

您将imagepath设置为额外内容并尝试检索imagePath

另请注意setImageURI()不是一个好选择,因为它会在主应用程序线程上加载和解码图像。使用图像加载库,如Picasso或Universal Image Loader。