0

My OrdersFragment has one nullable argument called Option:

 <argument
            android:name="option"
            app:argType="string"
            app:nullable="true" />

To work with nullable args I have declared a variable of this way above of the onViewCreated method

private val args : OrdersFragmentArgs? by navArgs()

And inside the onViewCreated of this fragment I have:

args?.let {

            if(it.option.equals("Completada")){
                getCompletedOrders()
            }else if (it.option.equals("Cancelada")){
                getCanceledOrders()
            }
        }

Then when I compile the app and I went to the ordesFragment the app got crash:

E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.elrestaurante, PID: 3388
    java.lang.RuntimeException: java.lang.reflect.InvocationTargetException
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:581)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1135)
     Caused by: java.lang.reflect.InvocationTargetException
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:571)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1135) 
     Caused by: java.lang.reflect.InvocationTargetException
        at java.lang.reflect.Method.invoke(Native Method)
        at androidx.navigation.NavArgsLazy.getValue(NavArgsLazy.kt:54)
        at androidx.navigation.NavArgsLazy.getValue(NavArgsLazy.kt:35)
        at com.example.elrestaurante.ui.orders.OrdersFragment.getArgs(OrdersFragment.kt:62)
        at com.example.elrestaurante.ui.orders.OrdersFragment.onViewCreated(OrdersFragment.kt:83)
        at androidx.fragment.app.Fragment.performViewCreated(Fragment.java:3128)
        at androidx.fragment.app.FragmentStateManager.createView(FragmentStateManager.java:552)
        at androidx.fragment.app.FragmentStateManager.moveToExpectedState(FragmentStateManager.java:261)
        at androidx.fragment.app.FragmentManager.executeOpsTogether(FragmentManager.java:1890)
        at androidx.fragment.app.FragmentManager.removeRedundantOperationsAndExecute(FragmentManager.java:1814)
        at androidx.fragment.app.FragmentManager.execPendingActions(FragmentManager.java:1751)
        at androidx.fragment.app.FragmentManager$5.run(FragmentManager.java:538)
        at android.os.Handler.handleCallback(Handler.java:938)
        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:8669)
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:571) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1135) 
     Caused by: java.lang.IllegalArgumentException: Required argument "option" is missing and does not have an android:defaultValue
        at com.example.elrestaurante.ui.orders.OrdersFragmentArgs.fromBundle(OrdersFragmentArgs.java:36)
        at java.lang.reflect.Method.invoke(Native Method) 
        at androidx.navigation.NavArgsLazy.getValue(NavArgsLazy.kt:54) 
        at androidx.navigation.NavArgsLazy.getValue(NavArgsLazy.kt:35) 
        at com.example.elrestaurante.ui.orders.OrdersFragment.getArgs(OrdersFragment.kt:62) 
        at com.example.elrestaurante.ui.orders.OrdersFragment.onViewCreated(OrdersFragment.kt:83) 
        at androidx.fragment.app.Fragment.performViewCreated(Fragment.java:3128) 
        at androidx.fragment.app.FragmentStateManager.createView(FragmentStateManager.java:552) 
        at androidx.fragment.app.FragmentStateManager.moveToExpectedState(FragmentStateManager.java:261) 
        at androidx.fragment.app.FragmentManager.executeOpsTogether(FragmentManager.java:1890) 
        at androidx.fragment.app.FragmentManager.removeRedundantOperationsAndExecute(FragmentManager.java:1814) 
        at androidx.fragment.app.FragmentManager.execPendingActions(FragmentManager.java:1751) 
        at androidx.fragment.app.FragmentManager$5.run(FragmentManager.java:538) 
        at android.os.Handler.handleCallback(Handler.java:938) 
        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:8669) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:571) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1135) 
I/Process: Sending signal. PID: 3388 SIG: 9

The error points to the condition args?.let { ... I don't know what to do, please dears if you have some idea to fix this problem I will appreciate it.

I just want send a parameter called option from "EditOrderFragment" to "OrdersFragment" but now I can't access to OrdersFragment, I don't know why happens this error, maybe is a bug?

thanks so much.

PD: I'm using this versions:

 id 'androidx.navigation.safeargs' version '2.5.3' apply false

    //Navigation components
    implementation "androidx.navigation:navigation-fragment-ktx:2.5.0"
    implementation "androidx.navigation:navigation-ui-ktx:2.5.0"
  • Is there a reason you didn't add a `android:default value="@null"` if you wanted a null default value? Nullability and having a default value are different things. – ianhanniballake Dec 03 '22 at 16:52
  • @ianhanniballake I tested that but now I can't pass this parameter in EditOrderFragmentDirections.actionEditOrderFragmentToOrdersFragment(item.option) this item.option is in red color it looks like I can't pass a parameter.. I declared a nullable parameter in ordersFragment because I want access to it before go to editOrder. And when I edit one order I need to return to ordersFragment with that parameter. – FreddicMatters Dec 03 '22 at 16:56
  • In summary now I can access to OrdersFragment according your idea but now in EditOrder I can't pass the parameter: val action = EditOrderFragmentDirections.actionEditOrderFragmentToOrdersFragment(item.option) findNavController().navigate(action) It says: Too many arguments for public open fun actionEditOrderFragmentToOrdersFragment(): EditOrderFragmentDirections.ActionEditOrderFragmentToOrdersFragment defined in com.example.elrestaurante.ui.orders.EditOrderFragmentDirections – FreddicMatters Dec 03 '22 at 17:02
  • That's because it is an optional argument now in your generated code - did you try the `setOption` method that is generated for optional arguments? – ianhanniballake Dec 03 '22 at 17:48

0 Answers0