首页 > 解决方案 > java.lang.NullPointerException:空对象引用上的 .Cursor.moveToFirst()'

问题描述

java.lang.NullPointerException:尝试在空对象引用上调用接口方法“boolean android.database.Cursor.moveToFirst()”

我想附上文件。

它可以是任何图像、doc、pdf。

在我的活动中:

String attachmentFile;
    Uri URI = null;
    private static final int PICK_FROM_GALLERY = 101;
    int columnIndex;
@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate( savedInstanceState );
        setContentView( R.layout.activity_add_notice );

        edBlock.setOnClickListener( new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                openFolder();
            }
        }

}

protected void onActivityResult(int requestCode, int resultCode, Intent data)
    {
        try {
            if (requestCode == PICK_FROM_GALLERY && resultCode == RESULT_OK) {
                Uri selectedImage = data.getData();
                String[] filePathColumn = { MediaStore.Images.Media.DATA };
                Cursor cursor = getContentResolver().query(selectedImage,filePathColumn, null, null, null);

                 cursor.moveToFirst();
                columnIndex = cursor.getColumnIndex(filePathColumn[0]);
                attachmentFile = cursor.getString(columnIndex);
                Log.e("Attachment Path:", attachmentFile);
                URI = Uri.parse("file://" + attachmentFile);
                cursor.close();
            }
        } catch (Exception e) {
            e.printStackTrace();
            Log.d( "Exception : " , e.getMessage() );
        }
    }

    public void openFolder()
    {
        Intent intent = new Intent();
        intent.setType("image/*");
        intent.setAction(Intent.ACTION_GET_CONTENT);
        intent.putExtra("return-data", true);
        startActivityForResult(Intent.createChooser(intent, "Complete action using"), PICK_FROM_GALLERY);
    }

它在 cursor.moveToFirst() 行的 onActivityResult 中生成错误;

标签: androidnullpointerexceptioncursorattachment

解决方案


在移动光标之前尝试获取索引

    protected void onActivityResult(int requestCode, int resultCode, Intent data)
        {
            try {
                if (requestCode == PICK_FROM_GALLERY && resultCode == RESULT_OK) {
                    Uri selectedImage = data.getData();
                    String[] filePathColumn = { MediaStore.Images.Media.DATA };
                    Cursor cursor = getContentResolver().query(selectedImage,filePathColumn, null, null, null);

                    columnIndex = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
cursor.moveToLast()
                    attachmentFile = cursor.getString(columnIndex);
                    Log.e("Attachment Path:", attachmentFile);
                    URI = Uri.parse("file://" + attachmentFile);
                    cursor.close();
                }
            } catch (Exception e) {
                e.printStackTrace();
                Log.d( "Exception : " , e.getMessage() );
            }
        }

推荐阅读