react-native-webview / react-native-webview

React Native Cross-Platform WebView
https://github.com/react-native-community/discussions-and-proposals/pull/3
MIT License
6.31k stars 2.96k forks source link

fix(android): Handle null value in setMenuCustomItems method #3375

Closed m0ai closed 1 month ago

m0ai commented 2 months ago

Following the implementation of menuItems support in Android (#2993), there's been an observed issue within the Android platform where altering menuItems triggers a Null Pointer Exception.

This issue seems to originate from a missing null handling in RNCWebViewManagerImpl.kt. I've detailed the specific error encountered below for reference.

This PR introduces modifications to handle cases where value is null in the setMenuCustomItems function.

Your feedback is greatly appreciated.

    com.facebook.react.bridge.JSApplicationIllegalArgumentException: Error while updating property 'menuItems' of a view managed by: RNCWebView
         at com.facebook.react.uimanager.v0$b.b(ViewManagerPropertyUpdater.java:123)
         at com.facebook.react.uimanager.ViewManager.updateProperties(ViewManager.java:79)
         at com.facebook.react.uimanager.m.updateProperties(NativeViewHierarchyManager.java:15)
         at com.facebook.react.uimanager.r0$t.d(UIViewOperationQueue.java:9)
         at com.facebook.react.uimanager.p0.run(UIViewOperationQueue.java:132)
         at com.facebook.react.uimanager.r0.c(UIViewOperationQueue.java:54)
         at com.facebook.react.uimanager.r0$h.doFrameGuarded(UIViewOperationQueue.java:28)
         at com.facebook.react.uimanager.f.doFrame(GuardedFrameCallback.java:1)
         at com.facebook.react.modules.core.ReactChoreographer$b.doFrame(ReactChoreographer.java:36)
         at com.facebook.react.modules.core.a$a$a.doFrame(ChoreographerCompat.java:3)
         at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1299)
         at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1309)
         at android.view.Choreographer.doCallbacks(Choreographer.java:923)
         at android.view.Choreographer.doFrame(Choreographer.java:847)
         at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:1283)
         at android.os.Handler.handleCallback(Handler.java:942)
         at android.os.Handler.dispatchMessage(Handler.java:99)
         at android.os.Looper.loopOnce(Looper.java:226)
         at android.os.Looper.loop(Looper.java:313)
         at android.app.ActivityThread.main(ActivityThread.java:8762)
         at java.lang.reflect.Method.invoke(Native Method)
         at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:604)
         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1067)
    Caused by: java.lang.reflect.InvocationTargetException
         at java.lang.reflect.Method.invoke(Native Method)
         at com.facebook.react.uimanager.v0$b.b(ViewManagerPropertyUpdater.java:65)
         at com.facebook.react.uimanager.ViewManager.updateProperties(ViewManager.java:79) 
         at com.facebook.react.uimanager.m.updateProperties(NativeViewHierarchyManager.java:15) 
         at com.facebook.react.uimanager.r0$t.d(UIViewOperationQueue.java:9) 
         at com.facebook.react.uimanager.p0.run(UIViewOperationQueue.java:132) 
         at com.facebook.react.uimanager.r0.c(UIViewOperationQueue.java:54) 
         at com.facebook.react.uimanager.r0$h.doFrameGuarded(UIViewOperationQueue.java:28) 
         at com.facebook.react.uimanager.f.doFrame(GuardedFrameCallback.java:1) 
         at com.facebook.react.modules.core.ReactChoreographer$b.doFrame(ReactChoreographer.java:36) 
         at com.facebook.react.modules.core.a$a$a.doFrame(ChoreographerCompat.java:3) 
         at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1299) 
         at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1309) 
         at android.view.Choreographer.doCallbacks(Choreographer.java:923) 
         at android.view.Choreographer.doFrame(Choreographer.java:847) 
         at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:1283) 
         at android.os.Handler.handleCallback(Handler.java:942) 
         at android.os.Handler.dispatchMessage(Handler.java:99) 
         at android.os.Looper.loopOnce(Looper.java:226) 
         at android.os.Looper.loop(Looper.java:313) 
         at android.app.ActivityThread.main(ActivityThread.java:8762) 
         at java.lang.reflect.Method.invoke(Native Method) 
         at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:604) 
         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1067) 
    Caused by: java.lang.NullPointerException: Parameter specified as non-null is null: method com.reactnativecommunity.webview.RNCWebViewManager.setMenuCustomItems, parameter value
         at com.reactnativecommunity.webview.RNCWebViewManager.setMenuCustomItems(RNCWebViewManager.java:13)
         at java.lang.reflect.Method.invoke(Native Method) 
TheAlmightyBob commented 2 months ago

Looks like the Windows CI has generally started failing, unrelated to this or other PRs.

@Titozzz @chiaramooney Do you know anything about this?

chiaramooney commented 2 months ago

Hmm I'm about to be OOF, but I will take a look when I return.

react-native-community-bot commented 1 month ago

:tada: This PR is included in version 13.10.1 :tada:

The release is available on:

Your semantic-release bot :package::rocket:

m0ai commented 1 month ago

Thank you for reviewing and merging my pull request. 🎉