gson 将新参数添加到保存在共享首选项中的JSON

kiayqfof  于 2023-10-18  发布在  其他
关注(0)|答案(2)|浏览(115)

在我的Android应用程序中,将自定义数据类转换为字符串json后,我将其保存为共享首选项。在新版本中,我需要在这里向数据类添加一个新参数,并检查它并在相关的屏幕上显示它。当我发布带有添加参数的新版本应用程序时,旧版本的用户是否会遇到崩溃?或者可能的情况是什么。有人有主意吗?
我使用Gson将数据类转换为JSON,然后再转换回数据类。

t98cgbkg

t98cgbkg1#

这很可能不是问题,因为如果字段的值丢失,Gson不会失败(参见related Gson feature request)。但是,如果数据来自应用的早期版本,并且该字段不存在值,则代码必须考虑新字段为null(或具有默认值的基元类型)。
您还可以为字段分配默认值(例如,public String newField = "default";),如果JSON数据中缺少字段,则使用该字段,但在这种情况下,您必须确保您的类是static(显式或隐式)并且具有无参数构造函数。否则,您可能会遇到Gson使用JDK Unsafe的问题(另请参阅GsonBuilder.disableJdkUnsafe())。
由于这是一个Android应用程序,您还必须确保您过去正确配置了ProGuard或R8,或者使用了@SerializedName。否则,您的JSON数据可能会使用混淆的字段名称,例如ab ...这些名称可能会在应用的新版本中更改,这将阻止它阅读JSON数据。有关详细信息,请参阅Gson故障排除指南。

9jyewag0

9jyewag02#

你可以把新的参数设为nullable,这样老的用户在解析之前不会崩溃。
或者如果你使用Gson,你可以为数据类创建TypeAdapter,并在解析json字符串时执行逻辑以确保它成功。
让我们检查:https://www.tutorialspoint.com/gson/gson_custom_adapters.htm

相关问题