Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/188.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android Uri中的图像路径返回null_Android - Fatal编程技术网

Android Uri中的图像路径返回null

Android Uri中的图像路径返回null,android,Android,我试图从gallery中获取所选文件的路径,但它返回null,我不知道为什么。我看到的每一个代码都使用相同的方法,但它不适合我。这是我的密码: @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { // LOAD_FILE_REQUEST is a global variable: // private static final int LOAD_FIL

我试图从gallery中获取所选文件的路径,但它返回null,我不知道为什么。我看到的每一个代码都使用相同的方法,但它不适合我。这是我的密码:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    // LOAD_FILE_REQUEST is a global variable: 
    // private static final int LOAD_FILE_REQUEST = 1;

    if (requestCode == LOAD_FILE_REQUEST && resultCode == RESULT_OK && data != null) {
        if(data.getData() == null) {
            System.out.println("NULL");
        } else { 
            System.out.println("NOT NULL"); // <--- Printed
        }

        currImageURI = data.getData();  

        String[] filePathColumn = {MediaStore.Images.Media.DATA};
        Cursor cursor = getContentResolver().query(currImageURI, filePathColumn, null, null, null); 
        if(cursor.moveToFirst()){
           int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
           String yourRealPath = cursor.getString(columnIndex);
           System.out.println("REAL PATH "+yourRealPath);
        } else {
            System.out.println("NO ROWS!!!"); // <-- Not printed
        }
        cursor.close();
    }

} 

您是否在清单中添加了以下行?=]


您是否在清单中添加了以下行?=]


好吧,下面是我如何在我的生活壁纸诺伊劳德,看看:p


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

        switch (requestCode) {
        case 100:
            if (resultCode == RESULT_OK) {
                Uri selectedImage = imageReturnedIntent.getData();
                @SuppressWarnings("unused")
                InputStream imageStream = null;
                try {
                    imageStream = getContentResolver().openInputStream(
                            selectedImage);
                } catch (FileNotFoundException e) {
                    e.printStackTrace();
                }
                sharedPreferences = getSharedPreferences("NLP_settings", 0);
                Editor editor = sharedPreferences.edit();
                editor.putString("key_bit", getPath(selectedImage));
                editor.commit();
                restartThis();
            }
        }
    }

    public String getPath(Uri uri) {
        // just some safety built in
        if (uri == null) {
            return null;
        }
        // try to retrieve the image from the media store first
        // this will only work for images selected from gallery
        String[] projection = { MediaStore.Images.Media.DATA };
        Cursor cursor = managedQuery(uri, projection, null, null, null);
        if (cursor != null) {
            int column_index = cursor
                    .getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
            cursor.moveToFirst();
            return cursor.getString(column_index);
        }
        // this is our fallback here
        return uri.getPath();
    }


好吧,下面是我如何在我的生活壁纸诺伊劳德,看看:p


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

        switch (requestCode) {
        case 100:
            if (resultCode == RESULT_OK) {
                Uri selectedImage = imageReturnedIntent.getData();
                @SuppressWarnings("unused")
                InputStream imageStream = null;
                try {
                    imageStream = getContentResolver().openInputStream(
                            selectedImage);
                } catch (FileNotFoundException e) {
                    e.printStackTrace();
                }
                sharedPreferences = getSharedPreferences("NLP_settings", 0);
                Editor editor = sharedPreferences.edit();
                editor.putString("key_bit", getPath(selectedImage));
                editor.commit();
                restartThis();
            }
        }
    }

    public String getPath(Uri uri) {
        // just some safety built in
        if (uri == null) {
            return null;
        }
        // try to retrieve the image from the media store first
        // this will only work for images selected from gallery
        String[] projection = { MediaStore.Images.Media.DATA };
        Cursor cursor = managedQuery(uri, projection, null, null, null);
        if (cursor != null) {
            int column_index = cursor
                    .getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
            cursor.moveToFirst();
            return cursor.getString(column_index);
        }
        // this is our fallback here
        return uri.getPath();
    }


你能再解释一下你的问题是什么吗?你从哪里得到空值

您在哪个Android版本中运行此代码?从Android 4.4开始,当您发送图像拾取意向时打开的文件选择器将返回一个相对uri,因为它不仅显示存储在设备中的文件,还显示存储在云中的文件。因此,您可能会得到一个相对URI,当您查询它在设备上的位置时,您会得到null,因为ContentResolver没有该文件的路径

如果事实上是这样,即使你不是,因为你应该开发与Android新版本兼容的应用程序,我建议你使用Content Resvolver打开InputStream来获取文件openInputStreamUri,因为它允许你从本地和云上的任何位置获取文件


我希望有帮助:

你能再解释一下你的问题是什么吗?你从哪里得到空值

您在哪个Android版本中运行此代码?从Android 4.4开始,当您发送图像拾取意向时打开的文件选择器将返回一个相对uri,因为它不仅显示存储在设备中的文件,还显示存储在云中的文件。因此,您可能会得到一个相对URI,当您查询它在设备上的位置时,您会得到null,因为ContentResolver没有该文件的路径

如果事实上是这样,即使你不是,因为你应该开发与Android新版本兼容的应用程序,我建议你使用Content Resvolver打开InputStream来获取文件openInputStreamUri,因为它允许你从本地和云上的任何位置获取文件


我希望它能有所帮助:

这是一个相对URI,当您查询它的位置时。。。ContentResolver没有该文件的路径。帮助我用另一种方法来解决我的问题。我没有试图获取图像位置,而是将其保存在sd上,然后通过这个新文件路径访问它。谢谢。是的,问题在于图像选择器的意图。这是一个相对URI,当你查询它的位置时。。。ContentResolver没有该文件的路径。帮助我用另一种方法来解决我的问题。我没有试图获取图像位置,而是将其保存在sd上,然后通过这个新文件路径访问它。谢谢。是的,问题出在图像选择器的意图上。