deeplink 在使用导航组件时发送不完整的序列化参数

deeplink sends incomplete serialized argument while using navigation component

我想使用导航组件和深层链接打开片段。

val serializedUser = Gson().toJson(user)
findNavController().navigate(Uri.parse("myapp://?user=${serializedUser}"))

但在目标片段中有时参数不完整。

val serializedUser = arguments?.getString("user")
val post = Gson().fromJson(serializedUser, User::class.java)

并出现此错误:

com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Unterminated string at line 1 column 1156 path $.text

如果我在目标片段中记录 serializedUser 这不完整并且它末尾的某些字符不存在,而在第一个片段中它是完整的。

序列化模型是一个长字符串,但它的长度似乎与此问题无关。因为一些更长的序列化模型工作。

只有在使用导航组件深层链接时才会出现此问题。

Uri.parse(String) 解析编码的 URI 字符串,但是您没有编码 serializedUser.

要解决此问题,您应该使用 Uri.fromParts(...) or the Uri.Builder class,而不需要您对 serializedUser.

进行编码