【问题标题】:How do you serialize a Parcelable to a String in Kotlin?如何在 Kotlin 中将 Parcelable 序列化为字符串?
【发布时间】:2021-06-11 00:42:29
【问题描述】:

我正在 Kotlin 中编写一个 Android 应用程序,并希望将 Location 类型作为字符串存储到 SQLite 中。位置是一个 Parcelable。 Parcelable 是否有序列化为 String 的方法?

我想做这样的事情:

var loc:Location
var str:Sring

... Code to Initialize 'loc'...

str = loc.serilizeToString()

【问题讨论】:

  • 我们不这样做,因为 Parcelable 不适合这个......而且协议可能会改变,并且在 fx 用户将设备升级到下一个 android 版本后数据可能不兼容

标签: android kotlin serialization parcelable


【解决方案1】:

您可以将对象转换为Parcel,然后获取字节(通过调用Parcel.marshall())并将其转换为String 并存储它,但您将依赖Location 的内部实现.更好的方法是编写您自己的方法,将您需要的数据从Location 对象序列化为String。例如,像这样:

String s = String.format("%s|%e|%e|%f|%f",
    location.getProvider(),
    location.getLatitude(),
    location.getLongitude(),
    location.getSpeed(),
    location.getBearing()
);

当您从数据库中读回它时,您只需将您的String 解析为组件部分,创建一个新的Location 对象并在其上设置各个组件。像这样的:

String s; // Location as String
String[] parts = s.split("|");
Location location = new Location(parts[0]);
location.setLatitude(Double.valueOf(parts[1]));
location.setLongitude(Double.valueOf(parts[2]));
location.setSpeed(Float.valueOf(parts[3]));
location.setBearing(Float.valueOf(parts[4]));

【讨论】:

  • 刚刚意识到这段代码是 Java 并且你想要 Kotlin,我希望它是可以理解的。
猜你喜欢
  • 1970-01-01
  • 2018-02-26
  • 2011-01-15
  • 1970-01-01
  • 2020-12-02
  • 1970-01-01
  • 2010-09-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多