此问题在此处已有答案:
can I send nullable data type as argument using safeargs ? if not what should I do?(1个答案)
8小时前关门。
我的OrdersFragment有一个称为Option的可空参数:
<argument
android:name="option"
app:argType="string"
app:nullable="true" />
为了使用可为空的参数,我在onViewCreated方法的上面以这种方式声明了一个变量
private val args : OrdersFragmentArgs? by navArgs()
在这个片段的onViewCreated中,我有:
args?.let {
if(it.option.equals("Completada")){
getCompletedOrders()
}else if (it.option.equals("Cancelada")){
getCanceledOrders()
}
}
然后,当我编译应用程序并转到ordesFragment时,应用程序崩溃:
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
错误指向条件参数?.let {...我不知道该怎么做,请亲爱的,如果你有一些想法来解决这个问题,我将不胜感激。
我只是想将一个名为option的参数从“EditOrderFragment”发送到“OrdersFragment”,但现在我无法访问OrdersFragment,我不知道为什么会发生这个错误,也许是一个bug?
非常感谢。
PD:我使用的是以下版本:
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"
1条答案
按热度按时间7rfyedvj1#
在Android中使用导航组件时,您可以将参数传递给目标片段。但是,如果参数可为空,则在尝试访问片段时会出现错误。
要解决这个问题,你可以使用Bundle对象代替可空参数。你可以将参数(选项)存储在一个包中,然后将该包传递给目标片段。这样,你就可以确保参数不为空,并且可以安全地传递给目标片段。
例如,您可以执行下列动作:
这样,您就可以将参数(选项)安全地传递到目标片段。