你如何在 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]));
我正在 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]));