GetStream / stream-chat-android

:speech_balloon: Android Chat SDK ➜ Stream Chat API. UI component libraries for chat apps. Kotlin & Jetpack Compose messaging SDK for Android chat
https://getstream.io/chat/sdk/android/
Other
1.45k stars 273 forks source link

MediaAttachmentFragment causes NPE crash (process death?) #2486

Closed rupinderjeet closed 2 years ago

rupinderjeet commented 3 years ago

Description

Crashlytics has reported that this issue occurs in first second of app launch.

Fatal Exception: java.lang.RuntimeException: Unable to start activity ComponentInfo{pkgname/pkgname.path.ChannelMessagesActivity}: androidx.fragment.app.Fragment$InstantiationException: Unable to instantiate fragment io.getstream.chat.android.ui.message.input.attachment.media.internal.MediaAttachmentFragment: calling Fragment constructor caused an exception
       at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3819)
       at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3995)
       ....
Caused by androidx.fragment.app.Fragment$InstantiationException: Unable to instantiate fragment io.getstream.chat.android.ui.message.input.attachment.media.internal.MediaAttachmentFragment: calling Fragment constructor caused an exception
       at androidx.fragment.app.Fragment.instantiate(Fragment.java:631)
       at androidx.fragment.app.FragmentContainer.instantiate(FragmentContainer.java:57)
       at androidx.fragment.app.FragmentManager$3.instantiate(FragmentManager.java:483)
       at androidx.fragment.app.FragmentStateManager.<init>(FragmentStateManager.java:85)
       at androidx.fragment.app.FragmentManager.restoreSaveState(FragmentManager.java:2728)
       at androidx.fragment.app.Fragment.restoreChildFragmentState(Fragment.java:1890)
       at androidx.fragment.app.Fragment.onCreate(Fragment.java:1867)
       at androidx.fragment.app.DialogFragment.onCreate(DialogFragment.java:471)
       at io.getstream.chat.android.ui.message.input.attachment.AttachmentSelectionDialogFragment.onCreate(AttachmentSelectionDialogFragment.kt:31)
       at androidx.fragment.app.Fragment.performCreate(Fragment.java:2949)
       at androidx.fragment.app.FragmentStateManager.create(FragmentStateManager.java:475)
       at androidx.fragment.app.FragmentStateManager.moveToExpectedState(FragmentStateManager.java:278)
       at androidx.fragment.app.FragmentStore.moveToExpectedState(FragmentStore.java:112)
       at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1647)
       at androidx.fragment.app.FragmentManager.dispatchStateChange(FragmentManager.java:3128)
       at androidx.fragment.app.FragmentManager.dispatchCreate(FragmentManager.java:3061)
       at androidx.fragment.app.FragmentController.dispatchCreate(FragmentController.java:240)
       at androidx.fragment.app.FragmentActivity.onCreate(FragmentActivity.java:276)
       at pkgname.path.ChannelMessagesActivity.onCreate(ChannelMessagesActivity.kt:93)
       at android.app.Activity.performCreate(Activity.java:8207)
       at android.app.Activity.performCreate(Activity.java:8191)
       at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1309)
       at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3792)
       at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3995)
       at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:85)
       at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
       at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2309)
       ...
Caused by java.lang.reflect.InvocationTargetException
       at java.lang.reflect.Constructor.newInstance0(Constructor.java)
       at java.lang.reflect.Constructor.newInstance(Constructor.java:343)
       at androidx.fragment.app.Fragment.instantiate(Fragment.java:613)
       at androidx.fragment.app.FragmentContainer.instantiate(FragmentContainer.java:57)
       at androidx.fragment.app.FragmentManager$3.instantiate(FragmentManager.java:483)
       at androidx.fragment.app.FragmentStateManager.<init>(FragmentStateManager.java:85)
       at androidx.fragment.app.FragmentManager.restoreSaveState(FragmentManager.java:2728)
       at androidx.fragment.app.Fragment.restoreChildFragmentState(Fragment.java:1890)
       at androidx.fragment.app.Fragment.onCreate(Fragment.java:1867)
       at androidx.fragment.app.DialogFragment.onCreate(DialogFragment.java:471)
       at io.getstream.chat.android.ui.message.input.attachment.AttachmentSelectionDialogFragment.onCreate(AttachmentSelectionDialogFragment.kt:31)
       at androidx.fragment.app.Fragment.performCreate(Fragment.java:2949)
       at androidx.fragment.app.FragmentStateManager.create(FragmentStateManager.java:475)
       at androidx.fragment.app.FragmentStateManager.moveToExpectedState(FragmentStateManager.java:278)
       at androidx.fragment.app.FragmentStore.moveToExpectedState(FragmentStore.java:112)
       at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1647)
       at androidx.fragment.app.FragmentManager.dispatchStateChange(FragmentManager.java:3128)
       at androidx.fragment.app.FragmentManager.dispatchCreate(FragmentManager.java:3061)
       at androidx.fragment.app.FragmentController.dispatchCreate(FragmentController.java:240)
       at androidx.fragment.app.FragmentActivity.onCreate(FragmentActivity.java:276)
       at pkgname.path.ChannelMessagesActivity.onCreate(ChannelMessagesActivity.kt:93)
       at android.app.Activity.performCreate(Activity.java:8207)
       at android.app.Activity.performCreate(Activity.java:8191)
       at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1309)
       at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3792)
       at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3995)
       at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:85)
       at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
       at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2309)
       at android.os.Handler.dispatchMessage(Handler.java:106)
       at android.os.Looper.loop(Looper.java:246)
       at android.app.ActivityThread.main(ActivityThread.java:8587)
      ...
Caused by java.lang.NullPointerException
       at io.getstream.chat.android.ui.message.input.attachment.media.internal.MediaAttachmentFragment$style$2.invoke(MediaAttachmentFragment.kt:36)
       at io.getstream.chat.android.ui.message.input.attachment.media.internal.MediaAttachmentFragment$style$2.invoke(MediaAttachmentFragment.kt:36)
       at kotlin.SynchronizedLazyImpl.getValue(LazyJVM.kt:74)
       at io.getstream.chat.android.ui.message.input.attachment.media.internal.MediaAttachmentFragment.getStyle(MediaAttachmentFragment.kt:36)
       at io.getstream.chat.android.ui.message.input.attachment.media.internal.MediaAttachmentFragment.<init>(MediaAttachmentFragment.kt:38)
       at java.lang.reflect.Constructor.newInstance0(Constructor.java)
       at java.lang.reflect.Constructor.newInstance(Constructor.java:343)
       at androidx.fragment.app.Fragment.instantiate(Fragment.java:613)
       at androidx.fragment.app.FragmentContainer.instantiate(FragmentContainer.java:57)
       at androidx.fragment.app.FragmentManager$3.instantiate(FragmentManager.java:483)
       at androidx.fragment.app.FragmentStateManager.<init>(FragmentStateManager.java:85)
       at androidx.fragment.app.FragmentManager.restoreSaveState(FragmentManager.java:2728)
       at androidx.fragment.app.Fragment.restoreChildFragmentState(Fragment.java:1890)
       at androidx.fragment.app.Fragment.onCreate(Fragment.java:1867)
       at androidx.fragment.app.DialogFragment.onCreate(DialogFragment.java:471)
       at io.getstream.chat.android.ui.message.input.attachment.AttachmentSelectionDialogFragment.onCreate(AttachmentSelectionDialogFragment.kt:31)
       at androidx.fragment.app.Fragment.performCreate(Fragment.java:2949)
       at androidx.fragment.app.FragmentStateManager.create(FragmentStateManager.java:475)
       at androidx.fragment.app.FragmentStateManager.moveToExpectedState(FragmentStateManager.java:278)
       at androidx.fragment.app.FragmentStore.moveToExpectedState(FragmentStore.java:112)
       at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1647)
       at androidx.fragment.app.FragmentManager.dispatchStateChange(FragmentManager.java:3128)
       at androidx.fragment.app.FragmentManager.dispatchCreate(FragmentManager.java:3061)
       at androidx.fragment.app.FragmentController.dispatchCreate(FragmentController.java:240)
       at androidx.fragment.app.FragmentActivity.onCreate(FragmentActivity.java:276)
       at pkgname.path.ChannelMessagesActivity.onCreate(ChannelMessagesActivity.kt:93)
       at android.app.Activity.performCreate(Activity.java:8207)
       at android.app.Activity.performCreate(Activity.java:8191)
       at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1309)
       at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3792)
       at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3995)
       at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:85)
       at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
       at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2309)
       at android.os.Handler.dispatchMessage(Handler.java:106)
       at android.os.Looper.loop(Looper.java:246)
       at android.app.ActivityThread.main(ActivityThread.java:8587)
       at java.lang.reflect.Method.invoke(Method.java)
       at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:602)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1130)       

SDK version

To Reproduce

From Crashlytics

Expected behavior NullPointerException is handled, and my app doesn't crash.

Device:

Screenshots Don't have any.

devUndef1ned commented 3 years ago

Hey @rupinderjeet We reproduced this crash. Seems it happens when an app tries to restore its' state if previously was closed with attachment picker for media attachments (image/video). We're investigating how we can solve it

adasiewiczr commented 2 years ago

hey @rupinderjeet , we just released a new version (4.21.0) that includes a fix mentioned above.