Форум для тех, кто программирует под Android
-
Anonymous
Android - у курсора не было столбца _data, который не найден
Сообщение
Anonymous »
При запуске приведенного ниже кода для запроса файла на SD-карте я всегда получаю ноль.
Код: Выделить всё
public String getRealPathFromURI(Context context, Uri uri)
{
String fileName="unknown";
if (uri.getScheme().toString().compareTo("content") == 0)
{
Cursor cursor = context.getContentResolver().query(uri,null,null,null,null);
if (cursor.moveToFirst())
{
Log.e(TAG, "dump cursor:" + DatabaseUtils.dumpCursorToString(cursor));
int column_index = cursor.getColumnIndexOrThrow(MediaStore.MediaColumns.DATA);
String name = cursor.getString(column_index);
if (name != null) {
uri = Uri.parse(cursor.getString(column_index));
fileName = uri.getLastPathSegment().toString();
}
}
}else if (uri.getScheme().compareTo("file") == 0){
fileName = uri.getLastPathSegment().toString();
}else {
fileName = fileName + "_" + uri.getLastPathSegment();
}
Log.e(TAG,"fileName:" + fileName);
return fileName;
}
Медиа-файл test.mp3 был отправлен на SD-карту, и я могу найти его в базе данных.
Затем из дампа курсора я обнаружил, что он на самом деле не содержит поля _data.
Код: Выделить всё
11138 09-18 16:14:53.881 27848 27848 E MyExam : dump cursor:>>>>> Dumping cursor android.content.ContentResolver$CursorWrapperInner@9ab47b6
11139 09-18 16:14:53.881 27848 27848 E MyExam : 0 {
11140 09-18 16:14:53.881 27848 27848 E MyExam : document_id=primary:test.mp3
11141 09-18 16:14:53.881 27848 27848 E MyExam : mime_type=audio/mpeg
11142 09-18 16:14:53.881 27848 27848 E MyExam : _display_name=test.mp3
11143 09-18 16:14:53.881 27848 27848 E MyExam : last_modified=1441221715000
11144 09-18 16:14:53.881 27848 27848 E MyExam : flags=70
11145 09-18 16:14:53.881 27848 27848 E MyExam : _size=14400116
11146 09-18 16:14:53.881 27848 27848 E MyExam : }
11147 09-18 16:14:53.881 27848 27848 E MyExam :
Подробнее здесь: [url]https://stackoverflow.com/questions/32661221/android-cursor-didnt-have-data-column-not-found[/url]
1764112205
Anonymous
При запуске приведенного ниже кода для запроса файла на SD-карте я всегда получаю ноль.
[code]public String getRealPathFromURI(Context context, Uri uri)
{
String fileName="unknown";
if (uri.getScheme().toString().compareTo("content") == 0)
{
Cursor cursor = context.getContentResolver().query(uri,null,null,null,null);
if (cursor.moveToFirst())
{
Log.e(TAG, "dump cursor:" + DatabaseUtils.dumpCursorToString(cursor));
int column_index = cursor.getColumnIndexOrThrow(MediaStore.MediaColumns.DATA);
String name = cursor.getString(column_index);
if (name != null) {
uri = Uri.parse(cursor.getString(column_index));
fileName = uri.getLastPathSegment().toString();
}
}
}else if (uri.getScheme().compareTo("file") == 0){
fileName = uri.getLastPathSegment().toString();
}else {
fileName = fileName + "_" + uri.getLastPathSegment();
}
Log.e(TAG,"fileName:" + fileName);
return fileName;
}
[/code]
Медиа-файл test.mp3 был отправлен на SD-карту, и я могу найти его в базе данных.
Затем из дампа курсора я обнаружил, что он на самом деле не содержит поля _data.
[code]11138 09-18 16:14:53.881 27848 27848 E MyExam : dump cursor:>>>>> Dumping cursor android.content.ContentResolver$CursorWrapperInner@9ab47b6
11139 09-18 16:14:53.881 27848 27848 E MyExam : 0 {
11140 09-18 16:14:53.881 27848 27848 E MyExam : document_id=primary:test.mp3
11141 09-18 16:14:53.881 27848 27848 E MyExam : mime_type=audio/mpeg
11142 09-18 16:14:53.881 27848 27848 E MyExam : _display_name=test.mp3
11143 09-18 16:14:53.881 27848 27848 E MyExam : last_modified=1441221715000
11144 09-18 16:14:53.881 27848 27848 E MyExam : flags=70
11145 09-18 16:14:53.881 27848 27848 E MyExam : _size=14400116
11146 09-18 16:14:53.881 27848 27848 E MyExam : }
11147 09-18 16:14:53.881 27848 27848 E MyExam :
Подробнее здесь: [url]https://stackoverflow.com/questions/32661221/android-cursor-didnt-have-data-column-not-found[/url]