Status Update
Comments
ab...@gmail.com <ab...@gmail.com> #2
Now, instead of crashing, we ignore invalid deep links, printing a log message saying as much.
yb...@google.com <yb...@google.com>
ya...@google.com <ya...@google.com> #3
The problem still occurs on version 2.2.0-rc04
yb...@google.com <yb...@google.com> #4
ab...@gmail.com <ab...@gmail.com> #5
ab...@gmail.com <ab...@gmail.com> #6
ya...@google.com <ya...@google.com> #7
da...@google.com <da...@google.com>
ai...@gmail.com <ai...@gmail.com> #8
NavDestination node = i == 0 ? mGraph : graph.findNode(destinationId);
if deepLink.length == 1 node never will be null and this will cause IllegalStateException
Bug demo:
get NavigationAdvancedSample from github
on R.id.about_btn click
NavDeepLinkBuilder(it.context)
.setGraph(R.navigation.list)
.setDestination(R.id.leaderboard)
.createTaskStackBuilder()
.startActivities()
will crash because R.id.leaderboard is start destination (findInvalidDestinationDisplayNameInDeepLink will have deepLink length == 1)
NavDeepLinkBuilder(it.context)
.setGraph(R.navigation.list)
.setDestination(R.id.userProfile)
.createTaskStackBuilder()
.startActivities()
will work because findInvalidDestinationDisplayNameInDeepLink will return NOT null
[Deleted User] <[Deleted User]> #9
It still crash with the latest version 2.2.1. I think the problem lies somewhere around this code
NavDestination node = i == 0 ? mGraph : graph.findNode(destinationId);
When i
is 0
, just return mGraph
itself. When the deep link destination is a root of bottom_nav tab, the deeplink.length
becomes 1. Which means this function still says there's no invalid Destination in deep link even if deepLink[0]
is totally irrelevant tomGraph
.
So this step passes and when findDestination() is actually triggered down the road, it won't find any destination and thus lead to unknown destination
crash.
All NavControllers of bottom nav automatically call handleDeepLink()
as part of onGraphCreated()
. The problem arises the moment NavController whose graph is irrelevant to the root deep link destination calls handleDeepLink()
.
Description
Version used: 1.1.0
Devices/Android versions reproduced on: all
I have two classes:
parent class - parent.kt
child class - child.kt
and standart dao.
But allways return data with null value - contactDetails. In generated code i will see next:
```
//...
final ContactDetails _tmpContactDetails;
if (! (_cursor.isNull(_cursorIndexOfCountryCode) && _cursor.isNull(_cursorIndexOfPhoneNumber))) {
final String _tmpCountryCode;
_tmpCountryCode = _cursor.getString(_cursorIndexOfCountryCode);
final String _tmpPhoneNumber;
_tmpPhoneNumber = _cursor.getString(_cursorIndexOfPhoneNumber);
_tmpContactDetails = new ContactDetails(_tmpCountryCode,_tmpPhoneNumber);
} else {
_tmpContactDetails = null;
}
_item = new ShareAccount(_tmpShareId,_tmpEntityId,_tmpUserId,_tmpOwnerId,null,_tmpCreatedAt,_tmpModifiedAt,_tmpAction);
/....
```
that is, regardless of the value of _tmpContactDetails, it will eventually be set to null.