你如何在 Kotlin 中将一个 Parcelable 序列化为一个字符串?

How do you serialize a Parcelable to a String in Kotlin?

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

我想做这样的事情:

var loc:Location
var str:Sring

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

str = loc.serilizeToString()

您可以将对象转换为 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]));