[英]ContentResolver.query: CursorIndexOutOfBoundsException
[英]Get URI from ContentResolver.query()
我正在查詢Images
表以獲取MediaStore.Images.Media.EXTERNAL_CONTENT_URI
目錄中的所有圖片。
請參閱以下查詢:
String[] what = new String[]{ MediaStore.Images.ImageColumns.DATE_TAKEN,
MediaStore.Images.ImageColumns._ID,
MediaStore.Images.ImageColumns.MIME_TYPE,
MediaStore.Images.ImageColumns.DATA };
String where = MediaStore.Images.Media.MIME_TYPE + "='image/jpeg'" +
" OR " + MediaStore.Images.Media.MIME_TYPE + "='image/png’";
Cursor cursor = getContext().getContentResolver()
.query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
what,
where,
null,
MediaStore.Images.ImageColumns.DATE_TAKEN + " DESC”);
現在,我想讓Uri指向每個結果。 這就是我現在正在做的事情:
int dataIndex = cursor.getColumnIndex(MediaStore.Images.ImageColumns.DATA);
String path = cursor.getString(dataIndex);
final Uri uri = Uri.fromFile(new File(path));
例如,我從DATA
列獲取路徑,創建一個文件並使用Uri.fromFile
。 我有兩個問題。
這保證有效嗎? 以上查詢是否保證返回數據列中的路徑? 它適用於我手機中的所有圖片: path
始終是路徑,如/storage/0/whatever.jpg
,而uri.toString()
與文件方案相同。 盡管如此,圖片很好地可以通過content:// uris來定義,但是我沒有看到它們如何(以及如果)在images表中表示。
如果沒有,我應該在DATA
列中期待什么,以及如何從中獲取Uri?
以上查詢是否保證返回數據列中的路徑?
它應該返回一些東西。 那些“東西”可能無法使用。 例如,映像可能位於可移動存儲上,您無法直接訪問它。
如何從它獲得一個Uri?
你沒有。 你從_ID
構造一個Uri
:
Uri imageUri=
ContentUris
.withAppendedId(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
cursor.getInt(cursor.getColumnIndex(MediaStore.Images.ImageColumns._ID)));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.