#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