从android gallery获取图像导致无法交付结果

从android gallery获取图像导致无法交付结果,android,image,Android,Image,我正试图从图库中获取图像,并通过改装发送。但我无法获取文件的写入路径。 在SO中搜索后,我发现使用data.getData无法获取写入文件路径,现在我使用此方法获取文件路径: public String getRealPathFromURI(Uri contentURI, Activity context) { String[] projection = { MediaStore.Images.Media.DATA }; @SuppressWarnings("deprec

我正试图从图库中获取图像,并通过改装发送。但我无法获取文件的写入路径。 在SO中搜索后,我发现使用data.getData无法获取写入文件路径,现在我使用此方法获取文件路径:

    public String getRealPathFromURI(Uri contentURI, Activity context) {
    String[] projection = { MediaStore.Images.Media.DATA };
    @SuppressWarnings("deprecation")
    Cursor cursor = context.managedQuery(contentURI, projection, null,
            null, null);
    if (cursor == null)
        return null;
    int column_index = cursor
            .getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
    if (cursor.moveToFirst()) {
        String s = cursor.getString(column_index);
        // cursor.close();
        return s;
    }
    // cursor.close();
    return null;
}
下面是我从gallery应用程序返回的结果:

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

        case 100 :
            if(resultCode == RESULT_OK && data != null){
                attachmentFile = new File(getRealPathFromURI(data.getData(),this));

                Toast.makeText(this,"File Explorer OK",Toast.LENGTH_SHORT).show();
            }
            else
                Toast.makeText(this,"File Explorer NOK",Toast.LENGTH_SHORT).show();
            break;
}
但在使用此方法和类似方法后,我得到了以下错误:

java.lang.RuntimeException: Failure delivering result     ResultInfo{who=null, request=100, result=-1, data=Intent {    dat=content://com.android.providers.media.documents/document/image:160640  flg=0x1 }} to activity  {com.x.TicketActivity}:  java.lang.NullPointerException
试试这个:

public static String getRealPathFromURI(Context context, Uri uri) {
    String result;
    Cursor cursor = context.getContentResolver().query(uri, null, null, null, null);
    if (cursor == null) {
        result = uri.getPath();
    } else {
        cursor.moveToFirst();
        int idx = cursor.getColumnIndex(MediaStore.Images.ImageColumns.DATA);
        result = cursor.getString(idx);
        cursor.close();
    }
    return result;
}
2-不要忘了使用在onActivityResult()中使用的相同代码启动活动

3-得到结果

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

    switch (requestCode) {
        case GALLERY_REQUEST_CODE:
            if (resultCode == RESULT_OK && data.getData() != null) {
                File file = new File(FileUtils.getRealPathFromURI(this, data.getData()));
                Log.i(TAG, "onActivityResult: File: " + file);
            } else {
                Log.i(TAG, "onActivityResult: Data is null");
            }
            break;
    }
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    switch (requestCode) {
        case GALLERY_REQUEST_CODE:
            if (resultCode == RESULT_OK && data.getData() != null) {
                File file = new File(FileUtils.getRealPathFromURI(this, data.getData()));
                Log.i(TAG, "onActivityResult: File: " + file);
            } else {
                Log.i(TAG, "onActivityResult: Data is null");
            }
            break;
    }
}