嘗試在 android studio (API 30) 中運行以下 Java 代碼片段時出現致命例外。我嘗試按照https://developer.android.com/training/secure-file-sharing/retrieve-info 中的這些步驟操作
Uri selectedImageUri = data.getData();
if (selectedImageUri != null) {
Cursor returnCursor = requireContext().getContentResolver().query(selectedImageUri,
null, null, null, null);
int nameIndex = returnCursor.getColumnIndex(OpenableColumns.DISPLAY_NAME);
System.out.println(returnCursor.getString(nameIndex));
}
E/AndroidRuntime: FATAL EXCEPTION: main
...
java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=1656054214, result=-1, data=Intent { dat=content://com.android.providers.downloads.documents/document/raw:/storage/emulated/0/Download/1.jpg flg=0x1 }} to activity {com.bonmanager/com.bonmanager.MainActivity}: android.database.CursorIndexOutOfBoundsException: Index -1 requested, with a size of 1
...
Caused by: android.database.CursorIndexOutOfBoundsException: Index -1 requested, with a size of 1
...
可能問題出在背景關系上,但我不知道為什么。以下是一些除錯列印:
System.out.println(returnCursor);
-> android.content.ContentResolver$CursorWrapperInner@7cfe38a
System.out.println(nameIndex);
-> 2
uj5u.com熱心網友回復:
在Cursor位于第一排時之前。moveToFirst()在嘗試讀取值之前呼叫它。
您也可以考慮使用DocumentFile.fromSingleUri(),然后呼叫getName()結果DocumentFile,這與您的代碼執行相同的操作。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/376335.html
