Skip to content

Java.Lang.NullPointerException: Attempt to invoke virtual method 'android.content.res.ColorStateList com.google.android.material.navigation.NavigationBarMenuView.getItemTextColor()' on a null object reference #10018

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
LeoJHarris opened this issue Apr 9, 2025 · 3 comments
Assignees
Labels
Area: App+Library Build Issues when building Library projects or Application projects.

Comments

@LeoJHarris
Copy link

Android framework version

net9.0-android

Affected platform version

Version 17.13.6

Description

This issue continues from an issue I logged earlier and circling back to it #9691

@jonathanpeppers continuing our previous discussion where you asked if _bottomNavigationView I can confirm that even on removing from CustomTabbedPageHandler the details of ConnectHandler I still get the crash

Steps to Reproduce

I don't have one at the moment.

Did you find any workaround?

Disabling r8 and d8

Relevant log output

Time	Device Name	Type	PID	Tag	Message
04-09 12:38:53.268	Samsung SM-G991U	Info	24150	MonoDroid	
04-09 12:38:53.268	Samsung SM-G991U	Info	24150	MonoDroid	java.lang.NullPointerException: Attempt to invoke virtual method 'void com.google.android.material.navigation.NavigationBarItemView.setTextColor(android.content.res.ColorStateList)' on a null object reference
	at com.google.android.material.navigation.NavigationBarMenuView.setItemTextColor(NavigationBarMenuView.java:227)
	at com.google.android.material.navigation.NavigationBarView.setItemTextColor(NavigationBarView.java:470)
	at crc6452ffdc5b34af3a0f.ScopedFragment.n_onCreateView(Native Method)
	at crc6452ffdc5b34af3a0f.ScopedFragment.onCreateView(ScopedFragment.java:45)
	at androidx.fragment.app.Fragment.performCreateView(Fragment.java:3119)
	at androidx.fragment.app.FragmentStateManager.createView(FragmentStateManager.java:577)
	at androidx.fragment.app.FragmentStateManager.moveToExpectedState(FragmentStateManager.java:286)
	at androidx.fragment.app.FragmentManager.executeOpsTogether(FragmentManager.java:2214)
	at androidx.fragment.app.FragmentManager.removeRedundantOperationsAndExecute(FragmentManager.java:2115)
	at androidx.fragment.app.FragmentManager.execPendingActions(FragmentManager.java:2052)
	at androidx.fragment.app.FragmentManager.dispatchStateChange(FragmentManager.java:3327)
	at androidx.fragment.app.FragmentManager.dispatchActivityCreated(FragmentManager.java:3237)
	at androidx.fragment.app.FragmentController.dispatchActivityCreated(FragmentController.java:263)
	at androidx.fragment.app.FragmentActivity.onStart(FragmentActivity.java:350)
	at androidx.appcompat.app.AppCompatActivity.onStart(AppCompatActivity.java:251)
	at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1582)
	at android.app.Activity.performStart(Activity.java:9008)
	at android.app.ActivityThread.handleStartActivity(ActivityThread.java:4198)
	at android.app.servertransaction.TransactionExecutor.performLifecycleSequence(TransactionExecutor.java:225)
	at android.app.servertransaction.TransactionExecutor.cycleToPath(TransactionExecutor.java:205)
	at android.app.servertransaction.TransactionExecutor.executeLifecycleState(TransactionExecutor.java:177)
	at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:98)
	at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2685)
	at android.os.Handler.dispatchMessage(Handler.java:106)
	at android.os.Looper.loopOnce(Looper.java:230)
	at android.os.Looper.loop(Looper.java:319)
	at android.app.ActivityThread.main(ActivityThread.java:8919)
	at java.lang.reflect.Method.invoke(Native Method)
	at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:578)
	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1103)
04-09 12:38:53.268	Samsung SM-G991U	Info	24150	MonoDroid	
  --- End of managed Java.Lang.NullPointerException stack trace ---
04-09 12:38:53.268	Samsung SM-G991U	Info	24150	MonoDroid	java.lang.NullPointerException: Attempt to invoke virtual method 'void com.google.android.material.navigation.NavigationBarItemView.setTextColor(android.content.res.ColorStateList)' on a null object reference
	at com.google.android.material.navigation.NavigationBarMenuView.setItemTextColor(NavigationBarMenuView.java:227)
	at com.google.android.material.navigation.NavigationBarView.setItemTextColor(NavigationBarView.java:470)
	at crc6452ffdc5b34af3a0f.ScopedFragment.n_onCreateView(Native Method)
	at crc6452ffdc5b34af3a0f.ScopedFragment.onCreateView(ScopedFragment.java:45)
	at androidx.fragment.app.Fragment.performCreateView(Fragment.java:3119)
	at androidx.fragment.app.FragmentStateManager.createView(FragmentStateManager.java:577)
	at androidx.fragment.app.FragmentStateManager.moveToExpectedState(FragmentStateManager.java:286)
	at androidx.fragment.app.FragmentManager.executeOpsTogether(FragmentManager.java:2214)
	at androidx.fragment.app.FragmentManager.removeRedundantOperationsAndExecute(FragmentManager.java:2115)
	at androidx.fragment.app.FragmentManager.execPendingActions(FragmentManager.java:2052)
	at androidx.fragment.app.FragmentManager.dispatchStateChange(FragmentManager.java:3327)
	at androidx.fragment.app.FragmentManager.dispatchActivityCreated(FragmentManager.java:3237)
	at androidx.fragment.app.FragmentController.dispatchActivityCreated(FragmentController.java:263)
	at androidx.fragment.app.FragmentActivity.onStart(FragmentActivity.java:350)
	at androidx.appcompat.app.AppCompatActivity.onStart(AppCompatActivity.java:251)
	at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1582)
	at android.app.Activity.performStart(Activity.java:9008)
	at android.app.ActivityThread.handleStartActivity(ActivityThread.java:4198)
	at android.app.servertransaction.TransactionExecutor.performLifecycleSequence(TransactionExecutor.java:225)
	at android.app.servertransaction.TransactionExecutor.cycleToPath(TransactionExecutor.java:205)
	at android.app.servertransaction.TransactionExecutor.executeLifecycleState(TransactionExecutor.java:177)
	at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:98)
	at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2685)
	at android.os.Handler.dispatchMessage(Handler.java:106)
	at android.os.Looper.loopOnce(Looper.java:230)
	at android.os.Looper.loop(Looper.java:319)
	at android.app.ActivityThread.main(ActivityThread.java:8919)
	at java.lang.reflect.Method.invoke(Native Method)
	at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:578)
	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1103)
04-09 12:38:53.268	Samsung SM-G991U	Info	24150	MonoDroid	Java.Lang.NullPointerException: Attempt to invoke virtual method 'void com.google.android.material.navigation.NavigationBarItemView.setTextColor(android.content.res.ColorStateList)' on a null object reference
   at Java.Interop.JniEnvironment.InstanceMethods.CallVoidMethod(JniObjectReference instance, JniMethodInfo method, JniArgumentValue* args)
   at Java.Interop.JniPeerMembers.JniInstanceMethods.InvokeVirtualVoidMethod(String encodedMember, IJavaPeerable self, JniArgumentValue* parameters)
   at Google.Android.Material.Navigation.NavigationBarView.set_ItemTextColor(ColorStateList value)
   at Microsoft.Maui.Controls.Handlers.TabbedPageManager.UpdateBarTextColor()
   at Microsoft.Maui.Controls.Handlers.TabbedPageManager.UpdateTabItemStyle()
   at Microsoft.Maui.Controls.TabbedPage.MapBarTextColor(ITabbedViewHandler handler, TabbedPage view)
   at Microsoft.Maui.PropertyMapperExtensions.<>c__DisplayClass2_0`2[[Microsoft.Maui.Controls.TabbedPage, Microsoft.Maui.Controls, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null],[Microsoft.Maui.Handlers.ITabbedViewHandler, Microsoft.Maui, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]].<ReplaceMapping>b__0(ITabbedViewHandler h, TabbedPage v, Action`2 p)
   at Microsoft.Maui.PropertyMapperExtensions.<>c__DisplayClass1_0`2[[Microsoft.Maui.Controls.TabbedPage, Microsoft.Maui.Controls, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null],[Microsoft.Maui.Handlers.ITabbedViewHandler, Microsoft.Maui, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]].<ModifyMapping>g__newMethod|0(IElementHandler handler, IElement view)
   at Microsoft.Maui.PropertyMapper`2.<>c__DisplayClass5_0[[Microsoft.Maui.ITabbedView, Microsoft.Maui, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null],[Microsoft.Maui.Handlers.ITabbedViewHandler, Microsoft.Maui, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]].<Add>b__0(IElementHandler h, IElement v)
   at Microsoft.Maui.PropertyMapper.UpdatePropertyCore(String key, IElementHandler viewHandler, IElement virtualView)
   at Microsoft.Maui.PropertyMapper.UpdateProperties(IElementHandler viewHandler, IElement virtualView)
   at Microsoft.Maui.Handlers.ElementHandler.SetVirtualView(IElement view)
   at Microsoft.Maui.Handlers.ViewHandler`2[[Microsoft.Maui.ITabbedView, Microsoft.Maui, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null],[Android.Views.View, Mono.Android, Version=0.0.0.0, Culture=neutral, PublicKeyToken=84e04ff9cfb79065]].SetVirtualView(IView view)
   at Microsoft.Maui.Handlers.ViewHandler`2[[Microsoft.Maui.ITabbedView, Microsoft.Maui, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null],[Android.Views.View, Mono.Android, Version=0.0.0.0, Culture=neutral, PublicKeyToken=84e04ff9cfb79065]].SetVirtualView(IElement view)
   at Microsoft.Maui.Controls.Element.SetHandler(IElementHandler newHandler)
   at Microsoft.Maui.Controls.Element.set_Handler(IElementHandler value)
   at Microsoft.Maui.Controls.VisualElement.Microsoft.Maui.IElement.set_Handler(IElementHandler value)
   at Microsoft.Maui.Platform.ElementExtensions.ToHandler(IElement view, IMauiContext context)
   at Microsoft.Maui.Platform.ElementExtensions.ToPlatform(IElement view, IMauiContext context)
   at Microsoft.Maui.Platform.ScopedFragment.OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
   at AndroidX.Fragment.App.Fragment.n_OnCreateView_Landroid_view_LayoutInflater_Landroid_view_ViewGroup_Landroid_os_Bundle_(IntPtr jnienv, IntPtr native__this, IntPtr native_inflater, IntPtr native_container, IntPtr native_savedInstanceState)
   at Android.Runtime.JNINativeWrapper.Wrap_JniMarshal_PPLLL_L(_JniMarshal_PPLLL_L callback, IntPtr jnienv, IntPtr klazz, IntPtr p0, IntPtr p1, IntPtr p2)
  --- End of managed Java.Lang.NullPointerException stack trace ---
@LeoJHarris LeoJHarris added Area: App+Library Build Issues when building Library projects or Application projects. needs-triage Issues that need to be assigned. labels Apr 9, 2025
@LeoJHarris
Copy link
Author

I noticed this issue occurs with r8 & d8 enabled although I cannot find rules if any to fix it. With the help of Gemini and analyzing the crash report it seems to want to see the details of the crc6452ffdc5b34af3a0f.ScopedFragment's onCreateView

crc6452ffdc5b34af3a0f.ScopedFragment's onCreateView method (or the equivalent MAUI code that gets compiled to this). Essential to understand the sequence of events and pinpoint the source of the null reference.

Beyond that I cannot seem to get around the crashing, occurs at the time my app loads a CustomTabbedPage with 5 nested pages wrapped in navigation pages.

@LeoJHarris
Copy link
Author

LeoJHarris commented Apr 9, 2025

I've also included the following proguard rules to no avail which Ill probably cleanup when I get this working

-keepclassmembers class Microsoft.Maui.Controls.Handlers.TabbedPageManager {
    private com.google.android.material.bottomnavigation.BottomNavigationView BottomNavigationView;
}

-keepclassmembers class com.google.android.material.navigation.NavigationBarView {
    public void setItemTextColor(android.content.res.ColorStateList);
    public android.content.res.ColorStateList getItemTextColor();
    public android.content.res.ColorStateList getItemIconTintList();
    public void setItemHorizontalTranslationEnabled(boolean);
}

-keepclassmembers class com.google.android.material.navigation.NavigationBarMenuView {
    public void setItemTextColor(android.content.res.ColorStateList);
    public com.google.android.material.navigation.NavigationBarItemView[] getButtons();
}

-keep class com.google.android.material.navigation.NavigationBarItemView {
    public void setTextColor(android.content.res.ColorStateList);
}

-keep class com.google.android.material.navigation.NavigationBarView {
    public android.content.res.ColorStateList getItemTextColor();
} 

EDIT: I realized I was also doing this keeping the entire package

-keep class com.google.android.material.navigation.** { *; }

@jpobst jpobst removed the needs-triage Issues that need to be assigned. label Apr 10, 2025
@LeoJHarris
Copy link
Author

LeoJHarris commented Apr 15, 2025

I got this resolved I think by adding these rules

-keep class com.google.android.material.** { *; }
-keep interface com.google.android.material.** { *; } 
-keepclassmembers class com.google.android.material.** { *; }
-keepclassmembers interface com.google.android.material.** { *; 
}

I did not make any other changes to my own source code.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Area: App+Library Build Issues when building Library projects or Application projects.
Projects
None yet
Development

No branches or pull requests

4 participants