Fixed
Status Update
Comments
il...@google.com <il...@google.com> #2
Project: platform/frameworks/support
Branch: androidx-main
commit 81120ca77c09c437775232585652b293ed572d45
Author: Clara Fok <clarafok@google.com>
Date: Thu Feb 29 17:29:44 2024
Paging to use common MainThread annotation
Test: ANDROIDX_PROJECTS=INFRAROGUE ./gradlew paging:paging-common:allTest
Bug: 327682438
Change-Id: I78f0d3cf36e3a3a9088e0698c351289cf2dbc1bf
M paging/paging-common/build.gradle
D paging/paging-common/src/commonJvmAndroidMain/kotlin/androidx/paging/MainThread.jvm.kt
D paging/paging-common/src/commonMain/kotlin/androidx/paging/MainThread.kt
M paging/paging-common/src/commonMain/kotlin/androidx/paging/PagingDataPresenter.kt
https://android-review.googlesource.com/2984997
Branch: androidx-main
commit 81120ca77c09c437775232585652b293ed572d45
Author: Clara Fok <clarafok@google.com>
Date: Thu Feb 29 17:29:44 2024
Paging to use common MainThread annotation
Test: ANDROIDX_PROJECTS=INFRAROGUE ./gradlew paging:paging-common:allTest
Bug: 327682438
Change-Id: I78f0d3cf36e3a3a9088e0698c351289cf2dbc1bf
M paging/paging-common/build.gradle
D paging/paging-common/src/commonJvmAndroidMain/kotlin/androidx/paging/MainThread.jvm.kt
D paging/paging-common/src/commonMain/kotlin/androidx/paging/MainThread.kt
M paging/paging-common/src/commonMain/kotlin/androidx/paging/PagingDataPresenter.kt
il...@google.com <il...@google.com>
ap...@google.com <ap...@google.com> #3
Fixed internally and available in paging-3.3.0-alpha05
il...@google.com <il...@google.com> #4
The following release(s) address this bug.It is possible this bug has only been partially addressed:
androidx.paging:paging-common:3.3.0-alpha05
androidx.paging:paging-common-android:3.3.0-alpha05
androidx.paging:paging-common-iosarm64:3.3.0-alpha05
androidx.paging:paging-common-iossimulatorarm64:3.3.0-alpha05
androidx.paging:paging-common-iosx64:3.3.0-alpha05
androidx.paging:paging-common-jvm:3.3.0-alpha05
androidx.paging:paging-common-linuxx64:3.3.0-alpha05
androidx.paging:paging-common-macosarm64:3.3.0-alpha05
androidx.paging:paging-common-macosx64:3.3.0-alpha05
zv...@gmail.com <zv...@gmail.com> #5
I'm still getting the error with "androidx.navigation:navigation-safe-args-gradle-plugin:2.1.0-alpha02"
<argument
android:name="filter"
android:defaultValue="@null"
app:nullable="true"
app:argType="***.ConsultationsFilter"
/>
---------
class TestFragment : androidx.fragment.app.Fragment() {
private val args by navArgs<TestFragment>()
...
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
....
val filter = args.filter // <-- throws null argument exception
}
<argument
android:name="filter"
android:defaultValue="@null"
app:nullable="true"
app:argType="***.ConsultationsFilter"
/>
---------
class TestFragment : androidx.fragment.app.Fragment() {
private val args by navArgs<TestFragment>()
...
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
....
val filter = args.filter // <-- throws null argument exception
}
zv...@gmail.com <zv...@gmail.com> #6
upd line: private val args by navArgs<TestFragmentArg>()
il...@google.com <il...@google.com> #7
Re #5/6 - please file a new bug with a sample project that reproduces your issue.
[Deleted User] <[Deleted User]> #8
i am facing null bundle exception while using nav graph arguments even i have set the default arguments in
nav graph and also check null in code
here is my sample code of Kotlin
private val args : BottomSheetCartFragmentArgs? by navArgs()
arg?.let {
product = it.product
isFromCart = it.isFromCart
screenName = it.screenName
}
Nav graph arguments
<argument
android:name="product"
app:argType="com.dawaai.dawaaidukaan.model.Product"
/>
<argument
android:name="isFromCart"
android:defaultValue="false"
app:argType="boolean"
/>
<argument
android:name="screenName"
app:argType="string"
android:defaultValue="recreate_order"/>
nav graph and also check null in code
here is my sample code of Kotlin
private val args : BottomSheetCartFragmentArgs? by navArgs()
arg?.let {
product = it.product
isFromCart = it.isFromCart
screenName = it.screenName
}
Nav graph arguments
<argument
android:name="product"
app:argType="com.dawaai.dawaaidukaan.model.Product"
/>
<argument
android:name="isFromCart"
android:defaultValue="false"
app:argType="boolean"
/>
<argument
android:name="screenName"
app:argType="string"
android:defaultValue="recreate_order"/>
jb...@google.com <jb...@google.com> #9
Re #8 - please file a new bug with a sample project that reproduces your issue.
cr...@gmail.com <cr...@gmail.com> #10
Hi I'm facing a similar issue.
My OrdersFragment has one nullable argument called Option:
<argument
android:name="option"
app:argType="string"
app:nullable="true" />
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
My OrdersFragment has one nullable argument called Option:
<argument
android:name="option"
app:argType="string"
app:nullable="true" />
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
Description
Version used: 1.0.0-rc02
When using a Fragment such as:
<fragment>
...
<argument
android:name="myArg"
app:argType="string"
app:nullable="true"
android:defaultValue="@null"/>
</fragment>
The defaultValue="@null" causes that attribute to be dropped by the NavInflater (due to now XmlPullParser works), meaning the resulting arguments Bundle can be null as there is no way to distinguish between no default value being set and a null default value being set.
Unfortunately, even in the case where no arguments are required, Safe Args' fromBundle() and, by extension, the by navArgs(), require a non-null Bundle.
fromBundle() should only throw on a null Bundle if there are required values.