Android MediaStore - SQLiteException:没有这样的列:标题
Android MediaStore - SQLiteException: No Such Column: Title
我正在尝试获取歌曲列表以填充回收站视图。我已经对所有其他选项卡进行了排序,但对于所有歌曲,它都无法正常工作。我正在使用 MediaStore.Audio.Media.TITLE
.
这是我的堆栈跟踪:
java.lang.RuntimeException: An error occurred while executing doInBackground()
at android.os.AsyncTask.done(AsyncTask.java:309)
at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:354)
at java.util.concurrent.FutureTask.setException(FutureTask.java:223)
at java.util.concurrent.FutureTask.run(FutureTask.java:242)
at android.os.AsyncTask$SerialExecutor.run(AsyncTask.java:234)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
at java.lang.Thread.run(Thread.java:818)
Caused by: android.database.sqlite.SQLiteException: no such column: title (code 1): , while compiling: SELECT _id, title, artist, album FROM album_info ORDER BY title ASC
at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:179)
at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:135)
at android.content.ContentProviderProxy.query(ContentProviderNative.java:421)
at android.content.ContentResolver.query(ContentResolver.java:493)
at android.content.ContentResolver.query(ContentResolver.java:435)
at xyz.timmo.music.SongsFragment$GetAlbums.doInBackground(SongsFragment.java:88)
at xyz.timmo.music.SongsFragment$GetAlbums.doInBackground(SongsFragment.java:71)
at android.os.AsyncTask.call(AsyncTask.java:295)
at java.util.concurrent.FutureTask.run(FutureTask.java:237)
at android.os.AsyncTask$SerialExecutor.run(AsyncTask.java:234)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
at java.lang.Thread.run(Thread.java:818)
我的游标方法是这样的:
Cursor cursor = context.getContentResolver().query(
MediaStore.Audio.Albums.EXTERNAL_CONTENT_URI,
new String[]{
//MediaStore.Audio.Media._ID,
MediaStore.Audio.Albums._ID,
MediaStore.Audio.Media.TITLE,
MediaStore.Audio.Artists.ARTIST,
MediaStore.Audio.Albums.ALBUM
//MediaStore.Audio.Media.DURATION
},
null,
null,
MediaStore.Audio.Media.TITLE + " ASC"
);
if (cursor != null) {
//count = cursor.getCount();
cursor.moveToFirst();
do {
artArrayList.add(cursor.getString(
cursor.getColumnIndex(MediaStore.Audio.Albums._ID)));
songsArrayList.add(cursor.getString(
cursor.getColumnIndex(MediaStore.Audio.Media.TITLE)));
artistsArrayList.add(cursor.getString(
cursor.getColumnIndex(MediaStore.Audio.Artists.ARTIST)));
albumsArrayList.add(cursor.getString(
cursor.getColumnIndex(MediaStore.Audio.Albums.ALBUM)));
} while (cursor.moveToNext());
cursor.close();
}
那么要获取的正确字符串是什么?所有其他主题都建议使用 MediaStore.Audio.Media.TITLE
但这似乎丢失了。这是在最新的 sdk 中删除的东西吗?
我明白了。当我应该获取 MediaStore.Audio.Media.EXTERNAL_CONTENT_URI
时,我在光标中获取 MediaStore.Audio.Albums.EXTERNAL_CONTENT_URI
以下是工作代码以供将来参考:
Cursor cursor = context.getContentResolver().query(
MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,
new String[]{
MediaStore.Audio.Media._ID,
//MediaStore.Audio.Albums._ID,
MediaStore.Audio.Media.TITLE,
MediaStore.Audio.Media.ARTIST,
MediaStore.Audio.Media.ALBUM
//MediaStore.Audio.Media.DURATION
},
null,
null,
MediaStore.Audio.Media.TITLE + " ASC"
);
if (cursor != null) {
//count = cursor.getCount();
cursor.moveToFirst();
do {
artArrayList.add(cursor.getString(
cursor.getColumnIndex(MediaStore.Audio.Albums._ID)));
songsArrayList.add(cursor.getString(
cursor.getColumnIndex(MediaStore.Audio.Media.TITLE)));
artistsArrayList.add(cursor.getString(
cursor.getColumnIndex(MediaStore.Audio.Artists.ARTIST)));
albumsArrayList.add(cursor.getString(
cursor.getColumnIndex(MediaStore.Audio.Albums.ALBUM)));
} while (cursor.moveToNext());
cursor.close();
我正在尝试获取歌曲列表以填充回收站视图。我已经对所有其他选项卡进行了排序,但对于所有歌曲,它都无法正常工作。我正在使用 MediaStore.Audio.Media.TITLE
.
这是我的堆栈跟踪:
java.lang.RuntimeException: An error occurred while executing doInBackground()
at android.os.AsyncTask.done(AsyncTask.java:309)
at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:354)
at java.util.concurrent.FutureTask.setException(FutureTask.java:223)
at java.util.concurrent.FutureTask.run(FutureTask.java:242)
at android.os.AsyncTask$SerialExecutor.run(AsyncTask.java:234)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
at java.lang.Thread.run(Thread.java:818)
Caused by: android.database.sqlite.SQLiteException: no such column: title (code 1): , while compiling: SELECT _id, title, artist, album FROM album_info ORDER BY title ASC
at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:179)
at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:135)
at android.content.ContentProviderProxy.query(ContentProviderNative.java:421)
at android.content.ContentResolver.query(ContentResolver.java:493)
at android.content.ContentResolver.query(ContentResolver.java:435)
at xyz.timmo.music.SongsFragment$GetAlbums.doInBackground(SongsFragment.java:88)
at xyz.timmo.music.SongsFragment$GetAlbums.doInBackground(SongsFragment.java:71)
at android.os.AsyncTask.call(AsyncTask.java:295)
at java.util.concurrent.FutureTask.run(FutureTask.java:237)
at android.os.AsyncTask$SerialExecutor.run(AsyncTask.java:234)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
at java.lang.Thread.run(Thread.java:818)
我的游标方法是这样的:
Cursor cursor = context.getContentResolver().query(
MediaStore.Audio.Albums.EXTERNAL_CONTENT_URI,
new String[]{
//MediaStore.Audio.Media._ID,
MediaStore.Audio.Albums._ID,
MediaStore.Audio.Media.TITLE,
MediaStore.Audio.Artists.ARTIST,
MediaStore.Audio.Albums.ALBUM
//MediaStore.Audio.Media.DURATION
},
null,
null,
MediaStore.Audio.Media.TITLE + " ASC"
);
if (cursor != null) {
//count = cursor.getCount();
cursor.moveToFirst();
do {
artArrayList.add(cursor.getString(
cursor.getColumnIndex(MediaStore.Audio.Albums._ID)));
songsArrayList.add(cursor.getString(
cursor.getColumnIndex(MediaStore.Audio.Media.TITLE)));
artistsArrayList.add(cursor.getString(
cursor.getColumnIndex(MediaStore.Audio.Artists.ARTIST)));
albumsArrayList.add(cursor.getString(
cursor.getColumnIndex(MediaStore.Audio.Albums.ALBUM)));
} while (cursor.moveToNext());
cursor.close();
}
那么要获取的正确字符串是什么?所有其他主题都建议使用 MediaStore.Audio.Media.TITLE
但这似乎丢失了。这是在最新的 sdk 中删除的东西吗?
我明白了。当我应该获取 MediaStore.Audio.Media.EXTERNAL_CONTENT_URI
MediaStore.Audio.Albums.EXTERNAL_CONTENT_URI
以下是工作代码以供将来参考:
Cursor cursor = context.getContentResolver().query(
MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,
new String[]{
MediaStore.Audio.Media._ID,
//MediaStore.Audio.Albums._ID,
MediaStore.Audio.Media.TITLE,
MediaStore.Audio.Media.ARTIST,
MediaStore.Audio.Media.ALBUM
//MediaStore.Audio.Media.DURATION
},
null,
null,
MediaStore.Audio.Media.TITLE + " ASC"
);
if (cursor != null) {
//count = cursor.getCount();
cursor.moveToFirst();
do {
artArrayList.add(cursor.getString(
cursor.getColumnIndex(MediaStore.Audio.Albums._ID)));
songsArrayList.add(cursor.getString(
cursor.getColumnIndex(MediaStore.Audio.Media.TITLE)));
artistsArrayList.add(cursor.getString(
cursor.getColumnIndex(MediaStore.Audio.Artists.ARTIST)));
albumsArrayList.add(cursor.getString(
cursor.getColumnIndex(MediaStore.Audio.Albums.ALBUM)));
} while (cursor.moveToNext());
cursor.close();