为什么我在doInBackground上出错

时间:2014-04-05 15:27:03

标签: android

这是我的代码:

protected S3TaskResult doInBackground(Uri... uris) {


        if (uris == null || uris.length != 1) {
            return null;
        }

        // The file location of the image selected.
        Uri selectedImage = uris[0];


        ContentResolver resolver = activity.getContentResolver();
        String fileSizeColumn[] = {OpenableColumns.SIZE}; 

        Cursor cursor = resolver.query(selectedImage,
                fileSizeColumn, null, null, null);

        cursor.moveToFirst();

        int sizeIndex = cursor.getColumnIndex(OpenableColumns.SIZE);
        // If the size is unknown, the value stored is null.  But since an int can't be
        // null in java, the behavior is implementation-specific, which is just a fancy
        // term for "unpredictable".  So as a rule, check if it's null before assigning
        // to an int.  This will happen often:  The storage API allows for remote
        // files, whose size might not be locally known.
        String size = null;
        if (!cursor.isNull(sizeIndex)) {
            // Technically the column stores an int, but cursor.getString will do the
            // conversion automatically.
            size = cursor.getString(sizeIndex);
        } 

        cursor.close();

        ObjectMetadata metadata = new ObjectMetadata();
        metadata.setContentType(resolver.getType(selectedImage));
        if(size != null){
            metadata.setContentLength(Long.parseLong(size));
        }

        S3TaskResult result = new S3TaskResult();

        // Put the image data into S3.
        try {
            s3ClientPasado.createBucket(Constants.getPictureBucket());

            PutObjectRequest por = new PutObjectRequest(
                    Constants.getPictureBucket(), Constants.PICTURE_NAME,
                    resolver.openInputStream(selectedImage),metadata);
            s3ClientPasado.putObject(por);
        } catch (Exception exception) {

            result.setErrorMessage(exception.getMessage());
        }

        return result;
    }

它表示执行doInBackground()

时发生错误

Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.net.Uri.getScheme()' on a null object reference

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:1)

当我传递的Uri转为null值时,我遇到了类似的问题。 问题发生在resolver.query方法中。 您应该发布其余的代码,以便我们更好地理解它。

例如 - 如果您在从相机获取图像后使用此代码,请发布您如何调用相机意图以及如何获取Uri。

祝你好运。