Android - 从设备中选择文件时,文件路径变为null

时间:2015-11-30 09:24:23

标签: android file-upload onactivityresult

我必须选择一个文件并发送到服务器。我正在使用以下代码

图库意图选择一个文件。

Intent intent = new Intent();
        intent.setType("*/*");
        intent.setAction(Intent.ACTION_GET_CONTENT);
        startActivityForResult(
                Intent.createChooser(intent, "Select Image"), REQUEST_CODE);

OnActivityResult

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    // TODO Auto-generated method stub
    super.onActivityResult(requestCode, resultCode, data);

    if (requestCode == REQUEST_CODE && resultCode == RESULT_OK) {

        if (data != null) {

            Uri selectedImageUri = data.getData();

            // GET IMAGE PATH
            imagePath = getPath(selectedImageUri);
            Log.d("", "Image path : " + imagePath);

            // IMAGE NAME
            imageName = imagePath.substring(imagePath.lastIndexOf("/"));

            imageSize = this.getFileSize(imagePath);

            // DECODE TO BITMAP
            // Bitmap bitmap = BitmapFactory.decodeFile(imagePath);

            // DISPLAY IMAGE
            // imageView.setImageBitmap(bitmap);
            imageLocationTextView.setText("File path :" + imagePath);
        }
    }
}

如果我将此行更改为

intent.setType("image/*");

到此

intent.setType("*/*");

我在onActivityResult上收到错误

 11-30 14:45:24.389: E/AndroidRuntime(3126): java.lang.RuntimeException: Failure delivering result 
 ResultInfo{who=null, request=1, result=-1, data=Intent { dat=content://com.android.externalstorage.documents/document/0BEE-381E:splash.jpg flg=0x1 }} 
 to activity {shane.atom/shane.atom.MainActivity}: java.lang.NullPointerException:
 Attempt to invoke virtual method 'int java.lang.String.lastIndexOf(java.lang.String)'
 on a null object reference

我将图像上传到服务器但是当我尝试将文件上传到服务器时我失败了。请帮忙建议任何解决方案。

先谢谢。

2 个答案:

答案 0 :(得分:0)

我们不是使用String. lastIndexOfsubstring方法来获取图片名称,而是使用File. getName()方法执行此操作:

if(imagePath !=null){
 File file=new File(imagePath);
 imageName = file.getName();
}

答案 1 :(得分:-1)

public String getRealPathFromURI(Context context, Uri contentUri) {
  Cursor cursor = null;
  try { 
    String[] proj = { MediaStore.Images.Media.DATA };
    cursor = context.getContentResolver().query(contentUri,  proj, null, null, null);
    int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
    cursor.moveToFirst();
    return cursor.getString(column_index);
  } finally {
    if (cursor != null) {
      cursor.close();
    }
  }
}

另外,请检查在清单中读取和写入外部存储的许可