How to resolve "no such column: date_addedDESC" error?

233 views Asked by At

My audio player on phone is showing "SQLite exception" and crashed. It needs external storage permission but I don't have a memory card. How to resolve this error?

Exception:

android.database.sqlite.SQLiteException: no such column: date_addedDESC (Sqlite code 1 SQLITE_ERROR): , while compiling: SELECT _id, _display_name, duration, _size, album_id FROM audio WHERE ((is_pending=0) AND (is_trashed=0) AND (volume_name IN ( 'external_primary' ))) AND (date_addedDESC), (OS error - 2:No such file or directory)

Main activity :

private void fetchPlayer() {
        //define a list to carry players
        List<player> mPlayer = new ArrayList<> ();
        Uri mediaStoreUri;

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
        mediaStoreUri = MediaStore.Audio.Media.getContentUri (MediaStore.VOLUME_EXTERNAL);
    }else{
        mediaStoreUri = MediaStore.Audio.Media. EXTERNAL_CONTENT_URI;
    }

        // define projection
        String[] projection = new String[]{
                MediaStore.Audio.Media._ID,
                MediaStore.Audio.Media.DISPLAY_NAME,
                MediaStore.Audio.Media.DURATION,
                MediaStore.Audio.Media.SIZE,
                MediaStore.Audio.Media.ALBUM_ID,
        };

        // order
         String sortOrder = MediaStore.Audio.Media.DATE_ADDED + " DESC  ";

        // get the players
        try (Cursor cursor = getContentResolver ().query (mediaStoreUri,projection,sortOrder,null,null)) {
            // cache cursor indices
            int idColumn = cursor.getColumnIndexOrThrow (MediaStore.Audio.Media._ID);
            int nameColumn = cursor.getColumnIndexOrThrow (MediaStore.Audio.Media.DISPLAY_NAME);
            int durationColumn = cursor.getColumnIndexOrThrow (MediaStore.Audio.Media.DURATION);
            int sizeColumn = cursor.getColumnIndexOrThrow (MediaStore.Audio.Media.SIZE);
            int albumColumn = cursor.getColumnIndexOrThrow (MediaStore.Audio.Media.ALBUM_ID);

            //clear the previous loaded before adding loading again
             while (cursor.moveToNext ()){
                //get the values of a column for a given audio file
                 long id = cursor.getLong(idColumn );
                 String name = cursor.getString (nameColumn);
                 int duration = cursor.getInt (durationColumn);
                 int size = cursor.getInt (sizeColumn);
                 long albumId = cursor.getLong (albumColumn);
                 // player Uri
                 Uri uri = ContentUris.withAppendedId (MediaStore.Audio.Media.EXTERNAL_CONTENT_URI , id );
                 // album artwork uri
                 Uri albumArtWorkUri = ContentUris.withAppendedId (Uri.parse("content:// media/external/audio/albumart") , albumId);
                 // remove mp3 extension from players name
                 name = name.substring (0 , name.lastIndexOf ("."));
                 //player item
                 player player  = new player (name , uri , albumArtWorkUri , size , duration , id );
                 //add player item to play list
                 mPlayer.add(player);
             }

             //display player
             showPlayers(mPlayer);

        }
    }

    private void showPlayers(List<player> mPlayer){

        if(mPlayer.size () == 0){
            Toast.makeText (this , "No Players" , Toast.LENGTH_SHORT ).show ();
            return;
        }

        // save players
        allPlayer.clear ();
        allPlayer.addAll (mPlayer);
        //update the tools bar title
        String title = getResources ().getString (R.string.app_name) + "." + mPlayer.size ();
        Objects.requireNonNull (getSupportActionBar ()).setTitle (title);
        //layout manager
        LinearLayoutManager layoutManager = new LinearLayoutManager (this);
        recyclerView.setLayoutManager (layoutManager);
        //players adapter
        playerAdapter = new playerAdapter (this , mPlayer);
        //set the adapter to recycleView
        recyclerView.setAdapter (playerAdapter);

    }
}
2

There are 2 answers

0
Ahmed Abubaker On BEST ANSWER

ok I solve it's problem I just space in sortOrder variable and I just click:

1- Build 2- then Clean Project 3- and Rebuild Project String sortOrder = MediaStore.Audio.Media.DATE_ADDED + " DESC ";

maybe to help any Developer

4
D T On

SortOrder is last parameter:

Cursor cursor = getContentResolver ().query (mediaStoreUri,projection,null,null,sortOrder)