2016-04-23 7 views
-1

Ich versuche, eine Liste von Songs zu einem Recyclerview zu füllen. Ich habe alle anderen Tabs sortiert, aber bei allen Songs weigert es sich zu arbeiten. Ich verwende MediaStore.Audio.Media.TITLE.Android MediaStore - SQLiteException: Keine solche Spalte: Titel

Das ist mein Stack-Trace:

java.lang.RuntimeException: An error occurred while executing doInBackground() 
at android.os.AsyncTask$3.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$1.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$2.call(AsyncTask.java:295) 
at java.util.concurrent.FutureTask.run(FutureTask.java:237) 
at android.os.AsyncTask$SerialExecutor$1.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)  

Meine Cursor-Methode ist wie so:

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(); 
} 

Also, was ist die richtige Zeichenfolge zu holen? Alle anderen Themen schlagen vor, MediaStore.Audio.Media.TITLE zu verwenden, aber das scheint zu fehlen. Ist das etwas, das in der neuesten SDK entfernt wurde?

+0

Was erwarten Sie 'TITLE' zu sein? Nach dem Lesen von [the docs] (http://developer.android.com/reference/android/provider/MediaStore.Audio.AlbumColumns.html) ist 'ALBUM' der Name des Albums. – CommonsWare

+0

Ich suche nach TITLE, aber das verursacht eine SQLiteException. – Timmo

+0

Dann loswerden 'TITLE'. Sie laden eine Liste von Alben. Der Name des Albums scheint in der 'ALBUM'-Spalte zu stehen. – CommonsWare

Antwort

0

Ich fand es heraus. Ich war MediaStore.Audio.Albums.EXTERNAL_CONTENT_URI in dem Cursor abruft, wenn ich MediaStore.Audio.Media.EXTERNAL_CONTENT_URI

Hier ist der Arbeitscode für die Zukunft holen werden soll:

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(); 
Verwandte Themen