material-components-android
material-components-android copied to clipboard
[BadgeUtils.java] App crash - Fatal Exception: IllegalArgumentException: badgeDrawable cannot be null
Description: App crashes as it encounters a fatal exception in the createParcelableBadgeStates() function (BadgeUtils.java)
Witnessing crashes recently with the below stack trace and the number of crashes seems to increase over time. Haven't been able to reproduce this issue
Fatal Exception: java.lang.IllegalArgumentException: badgeDrawable cannot be null at com.google.android.material.badge.BadgeUtils.createParcelableBadgeStates(BadgeUtils.java:223) at com.google.android.material.navigation.NavigationBarPresenter.onSaveInstanceState(NavigationBarPresenter.java:119) at androidx.appcompat.view.menu.MenuBuilder.dispatchSaveInstanceState(MenuBuilder.java:332) at androidx.appcompat.view.menu.MenuBuilder.savePresenterStates(MenuBuilder.java:365) at com.google.android.material.navigation.NavigationBarView.onSaveInstanceState(NavigationBarView.java:738) at android.view.View.dispatchSaveInstanceState(View.java:20984) at android.view.ViewGroup.dispatchSaveInstanceState(ViewGroup.java:3975) at android.view.ViewGroup.dispatchSaveInstanceState(ViewGroup.java:3981) at android.view.ViewGroup.dispatchSaveInstanceState(ViewGroup.java:3981) at android.view.ViewGroup.dispatchSaveInstanceState(ViewGroup.java:3981) at android.view.ViewGroup.dispatchSaveInstanceState(ViewGroup.java:3981) at android.view.View.saveHierarchyState(View.java:20967) at com.android.internal.policy.PhoneWindow.saveHierarchyState(PhoneWindow.java:2165) at android.app.Activity.onSaveInstanceState(Activity.java:2276) at androidx.core.app.ComponentActivity.onSaveInstanceState(ComponentActivity.java:93) at androidx.activity.ComponentActivity.onSaveInstanceState(ComponentActivity.java:335) at com.fetchrewards.fetchrewards.activities.main.MainActivity.onSaveInstanceState(MainActivity.kt:990) at android.app.Activity.performSaveInstanceState(Activity.java:2200) at android.app.Instrumentation.callActivityOnSaveInstanceState(Instrumentation.java:1520) at android.app.ActivityThread.callActivityOnSaveInstanceState(ActivityThread.java:5830) at android.app.ActivityThread.callActivityOnStop(ActivityThread.java:5229) at android.app.ActivityThread.performStopActivityInner(ActivityThread.java:5195) at android.app.ActivityThread.handleStopActivity(ActivityThread.java:5260) at android.app.servertransaction.StopActivityItem.execute(StopActivityItem.java:43) at android.app.servertransaction.ActivityTransactionItem.execute(ActivityTransactionItem.java:45) at android.app.servertransaction.TransactionExecutor.executeLifecycleState(TransactionExecutor.java:176) at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:97) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2253) at android.os.Handler.dispatchMessage(Handler.java:106) at android.os.Looper.loopOnce(Looper.java:201) at android.os.Looper.loop(Looper.java:288) at android.app.ActivityThread.main(ActivityThread.java:7870) at java.lang.reflect.Method.invoke(Method.java) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1003)
The crash is entirely random and cannot be reproduced at will.
Material Library version: 1.4.0 "com.google.android.material:material:1.4.0" - also used along side with compose material library
Android API version: Android API version 29+ (All occurred crashes occur on API level 29 and above - very less data on crashes with API level below 29)
Device: (however, the crash is not contained to the devices listed below) Pixel 6 (Android 12) Motorola One 5G (Android 11) Samsung S21 (Android 12)
#2054 Noticing there was a prior issue with the exact stack trace
Are you able to reproducible it with the latest library version?
As I said in the other duplicate issue, from the logic path I can't see how this can happen. I'm wondering if it's already been fixed. Can you help confirm that?
Yes, I'm still seeing the crash on the latest version of the material library (v1.6.0). However, I am not able to consistently reproduce this at will.
I am facing same issue with version 1.6.1 .. Stack Trace is almost same added below .. Tried to reproduce it but could not its completely random . Using theme Theme.MaterialComponents.Light.NoActionBar.Bridge ..
Fatal Exception: java.lang.IllegalArgumentException: badgeDrawable cannot be null at com.google.android.material.badge.BadgeUtils.createParcelableBadgeStates(BadgeUtils.java:270) at com.google.android.material.navigation.NavigationBarPresenter.onSaveInstanceState(NavigationBarPresenter.java:119) at androidx.appcompat.view.menu.MenuBuilder.dispatchSaveInstanceState(MenuBuilder.java:332) at androidx.appcompat.view.menu.MenuBuilder.savePresenterStates(MenuBuilder.java:365) at com.google.android.material.navigation.NavigationBarView.onSaveInstanceState(NavigationBarView.java:920) at android.view.View.dispatchSaveInstanceState(View.java:22163) at android.view.ViewGroup.dispatchSaveInstanceState(ViewGroup.java:4795) at android.view.ViewGroup.dispatchSaveInstanceState(ViewGroup.java:4801) at android.view.ViewGroup.dispatchSaveInstanceState(ViewGroup.java:4801) at android.view.ViewGroup.dispatchSaveInstanceState(ViewGroup.java:4801) at android.view.ViewGroup.dispatchSaveInstanceState(ViewGroup.java:4801) at android.view.View.saveHierarchyState(View.java:22146) at com.android.internal.policy.PhoneWindow.saveHierarchyState(PhoneWindow.java:2237) at android.app.Activity.onSaveInstanceState(Activity.java:2318) at androidx.core.app.ComponentActivity.onSaveInstanceState(ComponentActivity.java:93) at androidx.activity.ComponentActivity.onSaveInstanceState(ComponentActivity.java:337) at com.slayer.ui.activity.BaseActivity.onSaveInstanceState(BaseActivity.java:131) at android.app.Activity.performSaveInstanceState(Activity.java:2242) at android.app.Instrumentation.callActivityOnSaveInstanceState(Instrumentation.java:1508) at android.app.ActivityThread.callActivityOnSaveInstanceState(ActivityThread.java:6366) at android.app.ActivityThread.callActivityOnStop(ActivityThread.java:5719) at android.app.ActivityThread.performStopActivityInner(ActivityThread.java:5649) at android.app.ActivityThread.handleStopActivity(ActivityThread.java:5750) at android.app.servertransaction.StopActivityItem.execute(StopActivityItem.java:43) at android.app.servertransaction.ActivityTransactionItem.execute(ActivityTransactionItem.java:45) at android.app.servertransaction.TransactionExecutor.executeLifecycleState(TransactionExecutor.java:176) at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:97) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2438) at android.os.Handler.dispatchMessage(Handler.java:106) at android.os.Looper.loopOnce(Looper.java:226) at android.os.Looper.loop(Looper.java:313) at android.app.ActivityThread.main(ActivityThread.java:8669) at java.lang.reflect.Method.invoke(Method.java) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:571) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1135)
Has anyone been able to solve this issue? I'm getting the exact same as above and its completely random.
Am also getting this crash, anyone with a solution yet
This is generally a issue that pops up when trying to update the badge drawable on a non-UI thread. Make sure to call operations on the badge drawable from the Main thread to avoid this.