为了将图像发送到服务器,在获取图像的路径时,使用以下代码
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));
答案 0 :(得分:1)
为了将图像发送到服务器,在获取图像的路径时,使用以下代码
该代码不适用于任意Uri
值。
这里可能出现的问题
您正在尝试导出Uri
的文件路径。
使用ContentResolver
和openInputStream()
获取InputStream
标识的内容Uri
。然后,要么:
如果您的HTTP客户端API支持,则直接使用InputStream
上传内容,或
使用InputStream
和FileOutputStream
(在您控制的某个文件上,例如在getCacheDir()
中)制作内容的副本。然后,上传副本,完成后删除副本。