sc4v3ng3r / flutter_audio_query

Flutter Audio Query Plugin
https://pub.dev/packages/flutter_audio_query
MIT License
52 stars 48 forks source link

App crashes when calling getAlbumsFromArtist method #60

Open pratamatama opened 3 years ago

pratamatama commented 3 years ago

As written on the title, the app crashes when the method get called. I'm using GetX state management and calling this method every time the activeArtIdx has changed.

playlist_controller.dart

class PlaylistController extends GetxController {
  static PlaylistController get to => Get.find();

  final _query = FlutterAudioQuery();
  final artists = <ArtistInfo>[].obs;
  final activeArtIdx = 0.obs;
  final albums = <AlbumInfo>[].obs;
  final activeAlbIdx = 0.obs;

  @override
  void onInit() {
    _fetchArtists();
    ever(activeArtIdx, _fetchAlbums); // call _fetchAlbums every time activeArtIdx is changed.
    super.onInit();
  }

  Future<void> _fetchArtists() async {
    final ars = await _query.getArtists(sortType: ArtistSortType.DEFAULT);
    final invalidChars = RegExp(r'.*[\\\\/:\"*<>;|].*$');
    final filtered = ars.where((ar) => !ar.name.contains(invalidChars));
    artists.assignAll(filtered);
  }

  // this crashes the app.
  Future<void> _fetchAlbums(int artIndex) async {
    final a = await _query.getAlbumsFromArtist(artist: artists[artIndex].name);
    a.forEach((alb) => print(alb));
  }
}

Stacktrace

E/AndroidRuntime( 4438): FATAL EXCEPTION: AsyncTask #1
E/AndroidRuntime( 4438): Process: com.example.mazeplayer, PID: 4438
E/AndroidRuntime( 4438): java.lang.RuntimeException: An error occurred while executing doInBackground()
E/AndroidRuntime( 4438):    at android.os.AsyncTask$4.done(Unknown Source:27)
E/AndroidRuntime( 4438):    at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:383)
E/AndroidRuntime( 4438):    at java.util.concurrent.FutureTask.setException(FutureTask.java:252)
E/AndroidRuntime( 4438):    at java.util.concurrent.FutureTask.run(FutureTask.java:271)
E/AndroidRuntime( 4438):    at android.os.AsyncTask$SerialExecutor$1.run(Unknown Source:2)
E/AndroidRuntime( 4438):    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
E/AndroidRuntime( 4438):    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
E/AndroidRuntime( 4438):    at java.lang.Thread.run(Thread.java:919)
E/AndroidRuntime( 4438): Caused by: android.database.sqlite.SQLiteException: near "GROUP": syntax error (code 1 SQLITE_ERROR): , while compiling: SELECT album_id, album, is_music FROM audio WHERE ((is_pending=0) AND (is_trashed=0) AND (volume_name IN ( 'external_primary' ))) AND ((artist=? and is_music=?) GROUP BY (album)) ORDER BY title_key
E/AndroidRuntime( 4438):    at android.database.DatabaseUtils.readExceptionFromParcel(Unknown Source:15)
E/AndroidRuntime( 4438):    at android.database.DatabaseUtils.readExceptionFromParcel(Unknown Source:11)
E/AndroidRuntime( 4438):    at android.content.ContentProviderProxy.query(Unknown Source:77)
E/AndroidRuntime( 4438):    at android.content.ContentResolver.query(Unknown Source:77)
E/AndroidRuntime( 4438):    at android.content.ContentResolver.query(Unknown Source:4)
E/AndroidRuntime( 4438):    at android.content.ContentResolver.query(Unknown Source:12)
E/AndroidRuntime( 4438):    at boaventura.com.devel.br.flutteraudioquery.loaders.AlbumLoader$AlbumLoadTask.loadAlbumsInfoWithMediaSupport(AlbumLoader.java:380)
E/AndroidRuntime( 4438):    at boaventura.com.devel.br.flutteraudioquery.loaders.AlbumLoader$AlbumLoadTask.loadData(AlbumLoader.java:299)
E/AndroidRuntime( 4438):    at boaventura.com.devel.br.flutteraudioquery.loaders.AlbumLoader$AlbumLoadTask.loadData(AlbumLoader.java:227)
E/AndroidRuntime( 4438):    at boaventura.com.devel.br.flutteraudioquery.loaders.tasks.AbstractLoadTask.doInBackground(AbstractLoadTask.java:45)
E/AndroidRuntime( 4438):    at boaventura.com.devel.br.flutteraudioquery.loaders.tasks.AbstractLoadTask.doInBackground(AbstractLoadTask.java:12)
E/AndroidRuntime( 4438):    at android.os.AsyncTask$3.call(Unknown Source:20)
E/AndroidRuntime( 4438):    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
E/AndroidRuntime( 4438):    ... 4 more
W/ActivityThread( 4438): SCHED: com.example.mazeplayer/.MainActivity [87, r=1593ms, a=228ms, w=23901ms]
I/Process ( 4438): Sending signal. PID: 4438 SIG: 9
Lost connection to device.
Exited (sigterm)

Health check

Device: Xiaomi Redmi Note 7 [lavender]
OS: Android 10
Dev.Machine: Microsoft Windows [Version 10.0.19042.804]

Doctor summary (to see all details, run flutter doctor -v):
[√] Flutter (Channel stable, 1.22.6, on Microsoft Windows [Version 10.0.19042.804], locale en-ID)

[√] Android toolchain - develop for Android devices (Android SDK version 30.0.3)
[!] Android Studio (version 4.1.0)
    X Flutter plugin not installed; this adds Flutter specific functionality.
    X Dart plugin not installed; this adds Dart specific functionality.
[√] VS Code, 64-bit edition (version 1.53.2)
[√] Connected device (1 available)

! Doctor found issues in 1 category.