Ошибка при получении сериализованного объекта из интента. Failure filling in extras

Я пишу будильник на kotlin. Когда я передаю объект любого класса через интент (put extra), чтобы при срабатывании Alarm Manager (в классе Alarm Receiver), этот объект был принят, то возникает ошибка (Failure filling in extras) и вместо объекта принимается null. Класс объекта. Сам класс (в примере это класс Clock) реализует Serializable, класс используется во многих местах (он рабочий) и он является data классом. Я пробовал передавать другие объекты, но возникает та же ошибка.

Ошибка: Caused by: java.lang.ClassNotFoundException: Didn't find class "com.example.passwordalarmclock.Clock" on path: DexPathList[[zip file "/system/framework/services.jar", zip file "/system/framework/ethernet-service.jar", zip file "/system/framework/wifi-service.jar"],nativeLibraryDirectories=[/system/lib, /vendor/lib, /system/lib, /vendor/lib]]

Более полный trace:


Failure filling in extras
                                                                                                    java.lang.RuntimeException: Parcelable encountered ClassNotFoundException reading a Serializable object (name = com.example.passwordalarmclock.Clock)
                                                                                                        at android.os.Parcel.readSerializable(Parcel.java:2615)
                                                                                                        at android.os.Parcel.readValue(Parcel.java:2415)
                                                                                                        at android.os.Parcel.readArrayMapInternal(Parcel.java:2717)
                                                                                                        at android.os.BaseBundle.unparcel(BaseBundle.java:269)
                                                                                                        at android.os.Bundle.putAll(Bundle.java:226)
                                                                                                        at android.content.Intent.fillIn(Intent.java:8171)
                                                                                                        at com.android.server.am.PendingIntentRecord.sendInner(PendingIntentRecord.java:255)
                                                                                                        at com.android.server.am.PendingIntentRecord.sendWithResult(PendingIntentRecord.java:216)
                                                                                                        at com.android.server.am.ActivityManagerService.sendIntentSender(ActivityManagerService.java:7181)
                                                                                                        at android.app.PendingIntent.send(PendingIntent.java:836)
                                                                                                        at com.android.server.AlarmManagerService$DeliveryTracker.deliverLocked(AlarmManagerService.java:2989)
                                                                                                        at com.android.server.AlarmManagerService.deliverAlarmsLocked(AlarmManagerService.java:2429)
                                                                                                        at com.android.server.AlarmManagerService$AlarmThread.run(AlarmManagerService.java:2548)
                                                                                                    Caused by: java.lang.ClassNotFoundException: com.example.passwordalarmclock.Clock
                                                                                                        at java.lang.Class.classForName(Native Method)
                                                                                                        at java.lang.Class.forName(Class.java:400)
                                                                                                        at java.io.ObjectInputStream.resolveClass(ObjectInputStream.java:626)
                                                                                                        at android.os.Parcel$2.resolveClass(Parcel.java:2606)
                                                                                                        at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1613)
                                                                                                        at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1518)
                                                                                                        at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1772)
                                                                                                        at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1351)
                                                                                                        at java.io.ObjectInputStream.readObject(ObjectInputStream.java:373)
                                                                                                        at android.os.Parcel.readSerializable(Parcel.java:2609)
                                                                                                        at android.os.Parcel.readValue(Parcel.java:2415) 
                                                                                                        at android.os.Parcel.readArrayMapInternal(Parcel.java:2717) 
                                                                                                        at android.os.BaseBundle.unparcel(BaseBundle.java:269) 
                                                                                                        at android.os.Bundle.putAll(Bundle.java:226) 
                                                                                                        at android.content.Intent.fillIn(Intent.java:8171) 
                                                                                                        at com.android.server.am.PendingIntentRecord.sendInner(PendingIntentRecord.java:255) 
                                                                                                        at com.android.server.am.PendingIntentRecord.sendWithResult(PendingIntentRecord.java:216) 
                                                                                                        at com.android.server.am.ActivityManagerService.sendIntentSender(ActivityManagerService.java:7181) 
                                                                                                        at android.app.PendingIntent.send(PendingIntent.java:836) 
                                                                                                        at com.android.server.AlarmManagerService$DeliveryTracker.deliverLocked(AlarmManagerService.java:2989) 
                                                                                                        at com.android.server.AlarmManagerService.deliverAlarmsLocked(AlarmManagerService.java:2429) 
                                                                                                        at com.android.server.AlarmManagerService$AlarmThread.run(AlarmManagerService.java:2548) 
                                                                                                    Caused by: java.lang.ClassNotFoundException: Didn't find class "com.example.passwordalarmclock.Clock" on path: DexPathList[[zip file "/system/framework/services.jar", zip file "/system/framework/ethernet-service.jar", zip file "/system/framework/wifi-service.jar"],nativeLibraryDirectories=[/system/lib, /vendor/lib, /system/lib, /vendor/lib]]
                                                                                                        at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)
                                                                                                        at java.lang.ClassLoader.loadClass(ClassLoader.java:380)
                                                                                                        at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
                                                                                                        at java.lang.Class.classForName(Native Method) 
                                                                                                        at java.lang.Class.forName(Class.java:400) 
                                                                                                        at java.io.ObjectInputStream.resolveClass(ObjectInputStream.java:626) 
                                                                                                        at android.os.Parcel$2.resolveClass(Parcel.java:2606) 
                                                                                                        at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1613) 
                                                                                                        at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1518) 
                                                                                                        at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1772) 
                                                                                                        at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1351) 
                                                                                                        at java.io.ObjectInputStream.readObject(ObjectInputStream.java:373) 
                                                                                                        at android.os.Parcel.readSerializable(Parcel.java:2609) 
                                                                                                        at android.os.Parcel.readValue(Parcel.java:2415) 
                                                                                                        at android.os.Parcel.readArrayMapInternal(Parcel.java:2717) 
                                                                                                        at android.os.BaseBundle.unparcel(BaseBundle.java:269) 
                                                                                                        at android.os.Bundle.putAll(Bundle.java:226) 
                                                                                                        at android.content.Intent.fillIn(Intent.java:8171) 
                                                                                                        at com.android.server.am.PendingIntentRecord.sendInner(PendingIntentRecord.java:255) 
                                                                                                        at com.android.server.am.PendingIntentRecord.sendWithResult(PendingIntentRecord.java:216) 
                                                                                                        at com.android.server.am.ActivityManagerService.sendIntentSender(ActivityManagerService.java:7181) 
                                                                                                        at android.app.PendingIntent.send(PendingIntent.java:836) 
                                                                                                        at com.android.server.AlarmManagerService$DeliveryTracker.deliverLocked(AlarmManagerService.java:2989) 
                                                                                                        at com.android.server.AlarmManagerService.deliverAlarmsLocked(AlarmManagerService.java:2429) 
                                                                                                        at com.android.server.AlarmManagerService$AlarmThread.run(AlarmManagerService.java:2548) 

Класс:


package com.example.passwordalarmclock

import java.io.Serializable


data class Clock(
    var id: Long? = null,
    var isActive: Boolean = true,
    var withPassword: Boolean = false,
    var alarmRepeatingMode: AlarmRepeatingMode = AlarmRepeatingMode.ONETIME,
    var triggeringHour: Int = 0,
    var triggeringMinute: Int = 0,
    var triggeringWeekDays: Int? = null,
    var name: String? = null,
    var password: String? = null


) : Serializable{

    fun getTriggeringWeekDaysInAbbreviatedStringFormat() : String{
        if(triggeringWeekDays == null) return ""
        var daysInString = ""
        if ((triggeringWeekDays!! and 0b0000001) != 0) daysInString += MyApplication.getAppContext().getString(R.string.Mon) + " "
        if ((triggeringWeekDays!! and 0b0000010) != 0) daysInString += MyApplication.getAppContext().getString(R.string.Tue) + " "
        if ((triggeringWeekDays!! and 0b0000100) != 0) daysInString += MyApplication.getAppContext().getString(R.string.Wed) + " "
        if ((triggeringWeekDays!! and 0b0001000) != 0) daysInString += MyApplication.getAppContext().getString(R.string.Thu) + " "
        if ((triggeringWeekDays!! and 0b0010000) != 0) daysInString += MyApplication.getAppContext().getString(R.string.Fri) + " "
        if ((triggeringWeekDays!! and 0b0100000) != 0) daysInString += MyApplication.getAppContext().getString(R.string.Sat) + " "
        if ((triggeringWeekDays!! and 0b1000000) != 0) daysInString += MyApplication.getAppContext().getString(R.string.Sun) + " "
        return daysInString
    }
    fun getTimeInStringFormat(): String = "$triggeringHour:$triggeringMinute"
}

enum class AlarmRepeatingMode(val value: Int): Serializable {
    EVERYDAY(1),
    ONETIME(2),
    SELECTDAYS(3);

  
    companion object {
        fun fromValue(alarmRepeatingMode: Int): AlarmRepeatingMode {
            return values().firstOrNull { it.value == alarmRepeatingMode }
                ?: throw IllegalArgumentException("Несоответствующее значение для AlarmRepeatingMode")
        }
    }
}

Более простой класс, с которым возникает та же ошибка:


package com.example.passwordalarmclock

import java.io.Serializable

data class IntentTest(val testInt: Int): Serializable {}

Манифест:


<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools">

    <uses-permission android:name="android.permission.SCHEDULE_EXACT_ALARM" />

    <!--android:theme="@style/Theme.PasswordAlarmClock"-->
    <!--MyApplication - мой класс для обработки запуска и завершения приложения-->
    <!--android:theme="@style/MyTheme" Нужно было для попытки передавать в Dialog Alerts контекст приложения, а не контекст активити. Итог: не помогло-->
    <application
        android:name=".MyApplication"

        android:allowBackup="true"
        android:dataExtractionRules="@xml/data_extraction_rules"
        android:fullBackupContent="@xml/backup_rules"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/Base.Theme.PasswordAlarmClock"
        tools:targetApi="31">

<!--        Объявление неубиваемого сервиса для точных уведомлений-->
        <service
            android:name=".AlarmService"
            android:enabled="true"
            android:exported="true" />

        <receiver
            android:name=".AlarmReceiver"
            android:enabled="true"
            android:exported="true" />
        <activity
            android:name=".MainActivity"
            android:exported="true">
        </activity>
        <activity
            android:name=".ClockSettingActivity"
            android:exported="false">
        </activity>
        <activity
            android:name=".SettingsActivity"
            android:exported="true">
        </activity>

<!--        android:windowSoftInputMode="stateHidden" используется для предотвращения автоматического появления клавиатуры (из-за использования невидимой зоны для поля для ввода)-->
        <activity
            android:name=".LockScreenActivity"
            android:exported="true"
            android:windowSoftInputMode="stateHidden">
            <!--Этот блок делает активити стартовой-->
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

Создание интента (в классе AlarmManager):


            val alarmIntent = Intent(context, AlarmReceiver::class.java).apply {
                action = "ACTION_START_ALARM"
                putExtra("clock", clock)
                var box = "box"
                putExtra("box", box)
                putExtra("test", IntentTest(4))
            }

val pendingIntent = PendingIntent.getBroadcast(context, clock.id!!.toInt(), alarmIntent, PendingIntent.FLAG_UPDATE_CURRENT)

                alarmManager?.setExact(
                    AlarmManager.RTC_WAKEUP,
                    calendar.timeInMillis,
                    pendingIntent
                )

Приём интента (в классе AlarmReceiver):


val intentClock =  intent.getSerializableExtra("clock") as? com.example.passwordalarmclock.Clock


Ответы (0 шт):