Android中的图片路径为null

时间:2016-12-12 13:37:30

标签: android

我有这样的代码,问题是当我想将它保存到sqlite时,错误消息显示我在图像路径中为空。 这是主要活动

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

        if (resultCode == RESULT_OK) {
            if (requestCode == SELECT_PICTURE) {
                Uri selectedImageUri = data.getData();
                System.out.println("Data Image : "+selectedImageUri);
                selectedImagePath = getPath(selectedImageUri);
                System.out.println("Image Path : " + selectedImagePath);
                image1.setVisibility(View.VISIBLE);
                image1.setImageURI(selectedImageUri);
            }
        }
    }
private String getRealPathFromURI(Uri contentURI) {
        String result;
        Cursor cursor = getContentResolver().query(contentURI, null, null, null, null);
        if (cursor == null) { // Source is Dropbox or other similar local file path
            result = contentURI.getPath();
        } else {
            cursor.moveToFirst();
            int idx = cursor.getColumnIndex(MediaStore.Images.ImageColumns.DATA);
            result = cursor.getString(idx);
            cursor.close();
        }
        return result;
    }
public String getPath(Uri uri) {
        String[] projection = { MediaStore.Images.Media.DATA };
        Cursor cursor = managedQuery(uri, projection, null, null, null);
        int column_index = cursor
                .getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
        cursor.moveToFirst();
        return cursor.getString(column_index);
    }

2 个答案:

答案 0 :(得分:0)

我使用这种方法从相机拍摄照片。

public abstract class Window2<TViewModel> : Window {

    protected TViewModelViewModel {
        get { return (TViewModel)this.DataContext; }
    }
}

然后onActivityResult将如下所示:

private void capturePhoto() {
// save this Uri in a field variable.
    uri = getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
            new ContentValues());
    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);
    startActivityForResult(intent, CAMERA_REQUEST);
}

答案 1 :(得分:0)

  1. 在清单文件集权限

  2. 检查onActivityResult方法授予的权限及其授予后的READ_EXTERNAL_STORAGE

  3. 如果它具有权限,则调用doCreatePath()并在onRequestPermissionsResult上设置相同的权限。

  4. void doCreatePath()
     {
    
            try {
    
                Uri originalUri = filePath;
                String pathsegment[] = originalUri.getLastPathSegment().split(":");
                String id = pathsegment[0];
                final String[] imageColumns = {MediaStore.Images.Media.DATA};
                final String imageOrderBy = null;
                Uri uri = getUri();
                Cursor imageCursor = getActivity().getContentResolver().query(uri, imageColumns,
                        null, null, null);
    
                if (imageCursor.moveToFirst()) {
                    int column_index_data = imageCursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
                    realPath = imageCursor.getString(column_index_data);
                    System.out.print("value" + realPath);
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    

    有效!。