результаты области пусты после очистки приложения от многозадачности с помощью сервиса

#android #realm

#Android #realm

Вопрос:

у меня есть сервис, который загружает некоторые файлы с помощью ion библиотеки, и когда загрузка завершена, я хочу сохранить загруженные файлы в базу данных realm database проблема в том, что когда пользователь очищает приложение от многозадачности, приложение выходит из строя и отображается ArrayIndexOutOfBoundsException в logcat я думаю, проблема в том, что класс модели уничтожается при очистке приложения

вот код

//Код сервиса

 List<Surah> surahList;

 @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        if (intent != null)
            reciterName = intent.getStringExtra("reciterName");

        surahList = realm.where(Surah.class).equalTo("reciterName", reciterName).findAll();
        Surah surah = surahList.get(10);
        String folderName = surah.getReciterName()   " "   surah.getRewaya();
        File path = new File(Environment.getExternalStorageDirectory()   "/Quran Sound/"   folderName   "/"   surah.getSurahNumberMp3());


        NotificationCompat.Builder builder = new NotificationCompat.Builder(this);
        builder
                .setSmallIcon(R.drawable.ic_stat_noti);
         final NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
        notificationManager.notify(2, builder.build());
        Ion.with(this)
                .load(surah.getSurahLink())
                .write(path)
                .setCallback(new FutureCallback<File>() {
                    @Override
                    public void onCompleted(Exception e, File result) {
                        Toast.makeText(DownloadService.this, result   "", Toast.LENGTH_SHORT).show();
                        Log.d("3llomi", "ion Download Finished!");
                        notificationManager.cancel(2);
                        stopSelf();
                    }
                });

        return START_STICKY;
    }
  

//Logcat

 FATAL EXCEPTION: main
Process: com.devlomi.quransound, PID: 4424
java.lang.RuntimeException: Unable to start service com.devlomi.quransound.DownloadService@8f466f2 with null: java.lang.ArrayIndexOutOfBoundsException: rowIndex > available rows: 10 > 0
    at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:3027)
    at android.app.ActivityThread.-wrap17(ActivityThread.java)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1442)
    at android.os.Handler.dispatchMessage(Handler.java:102)
    at android.os.Looper.loop(Looper.java:148)
    at android.app.ActivityThread.main(ActivityThread.java:5417)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
 Caused by: java.lang.ArrayIndexOutOfBoundsException: rowIndex > available rows: 10 > 0
    at io.realm.internal.TableView.nativeGetSourceRowIndex(Native Method)
    at io.realm.internal.TableView.getSourceRowIndex(TableView.java:128)
    at io.realm.RealmResults.get(RealmResults.java:205)
    at io.realm.RealmResults.get(RealmResults.java:70)
    at com.devlomi.quransound.DownloadService.onStartCommand(DownloadService.java:104)
    at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:3010)
    at android.app.ActivityThread.-wrap17(ActivityThread.java) 
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1442) 
    at android.os.Handler.dispatchMessage(Handler.java:102) 
    at android.os.Looper.loop(Looper.java:148) 
    at android.app.ActivityThread.main(ActivityThread.java:5417) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616 

Комментарии:

1. Это говорит о том, что ваш RealmResults пуст

2. Хорошо, но когда приложение не очищено, оно все еще работает без проблем

3. Возможно, вы можете проверить, что realm.where(Surah.class).findAll().size() такое, чтобы увидеть, очищена ли ваша область или нет.

Ответ №1:

хорошо, проблема заключалась в том, что reciterName то, что происходит от намерения использования Activity to Service , уничтожается при очистке приложения от многозадачности, поэтому я меняю с return START_STICKY на return START_REDELIVER_INTENT