Android 调用库后,游标返回空结果

Android 调用库后,游标返回空结果,android,gallery,Android,Gallery,我正在做一个应用程序,我需要打开一个图库并选择一张图片,但当我返回到活动时,项目的光标返回null 在这里,我打开了图库: private static final int SELECT_PICTURE = 1; private void abrirGaleria(){ Intent intent = new Intent(); intent.setType("image/*"); intent.setAction(Intent.ACTI

我正在做一个应用程序,我需要打开一个图库并选择一张图片,但当我返回到活动时,项目的光标返回null

在这里,我打开了图库:

private static final int SELECT_PICTURE = 1;

    private void abrirGaleria(){
        Intent intent = new Intent();
        intent.setType("image/*");
        intent.setAction(Intent.ACTION_GET_CONTENT);
        startActivityForResult(Intent.createChooser(intent,"Select a pic"), SELECT_PICTURE);
    }
在这里,我尝试得到以下结果:

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

        if(resultCode == ((Activity)ctx).RESULT_OK){
            Uri selectedImageURI = data.getData();
            File filePath = new File(getRealPathFromURI(selectedImageURI));

            compartilharAFoto(filePath.getPath());
        }
    }

private String getRealPathFromURI(Uri contentURI) {
        Cursor cursor = ((Activity)ctx).getContentResolver().query(contentURI, null, null, null, null);
        if (cursor == null) { // Source is Dropbox or other similar local file path
            return contentURI.getPath();
        } else {
            //cursor.moveToFirst();
            int idx = cursor.getColumnIndex(MediaStore.Images.ImageColumns.DATA);
            return cursor.getString(0);//idx);
        }
    }
错误是:

java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=131073, result=-1, data=Intent { dat=content://com.android.providers.media.documents/document/image:1633 flg=0x1 }} to activity {br.com.blacktoad.q48h2/br.com.blacktoad.q48h2.MainActivity}: android.database.CursorIndexOutOfBoundsException: Index -1 requested, with a size of 1
出现另一个错误说明:

Caused by: android.database.CursorIndexOutOfBoundsException: Index -1 requested, with a size of 1

您的查询没有您试图访问的列。 替换:

与:

并将此行更新如下:

 int idx = cursor.getColumnIndex(MediaStore.Images.Media.DATA);
和取消注释:

  cursor.moveToFirst();

@用户1697583请参阅更新的答案。列从
ImageColumns.Data
更改为
Media.Data
它应该是:
if(cursor.moveToFirst()){two statement}否则{抱歉,没有行返回null;}
。使用idx!不是0。
 int idx = cursor.getColumnIndex(MediaStore.Images.Media.DATA);
  cursor.moveToFirst();