在Android中获取图像的完整路径名时出错

时间:2017-05-13 20:15:50

标签: android image-processing

为了将图像发送到服务器,在获取图像的路径时,使用以下代码

private String getPath(Uri uri){
        String path = null;
        Cursor cursor = null;
        try {
            Toast.makeText(this,"Beginning of getPath()", Toast.LENGTH_LONG).show();
            cursor=getContentResolver().query(uri,null,null,null,null);
            cursor.moveToFirst();
            String document_id=cursor.getString(0);
            document_id=document_id.substring(document_id.lastIndexOf(".")+1);

            cursor=getContentResolver().query(
                    MediaStore.Images.Media.EXTERNAL_CONTENT_URI,null,MediaStore.Images.Media._ID+"=?",new String[]{document_id},null);
            cursor.moveToFirst();
            path=cursor.getString(cursor.getColumnIndex(MediaStore.Images.Media.DATA));
            Toast.makeText(this,"At the end of getPath()", Toast.LENGTH_LONG).show();

        }
        catch(Exception e){
            e.printStackTrace();
        } finally {
            cursor.close();
        }


        return path;
    }

我在这里设置了两个吐司方法来检查控制流程。我在方法的开头得到第一个toast消息,但没有得到下一个...这反映了代码那部分的错误... 这里可能出了什么问题。 Android堆栈跟踪给出了以下'

android.database.CursorIndexOutOfBoundsException: Index 0 requested, with a size of 0

在下面的行

path=cursor.getString(cursor.getColumnIndex(MediaStore.Images.Media.DATA));

1 个答案:

答案 0 :(得分:1)

  

为了将图像发送到服务器,在获取图像的路径时,使用以下代码

该代码不适用于任意Uri值。

  

这里可能出现的问题

您正在尝试导出Uri的文件路径。

使用ContentResolveropenInputStream()获取InputStream标识的内容Uri。然后,要么:

  • 如果您的HTTP客户端API支持,则直接使用InputStream上传内容,或

  • 使用InputStreamFileOutputStream(在您控制的某个文件上,例如在getCacheDir()中)制作内容的副本。然后,上传副本,完成后删除副本。