【发布时间】:2019-01-11 12:52:41
【问题描述】:
我目前正在开发一个 Android 应用程序(我是开发 Android 应用程序的初学者),我正在实现一个非常简单的类,它能够处理位置(纬度、经度)和相应的地址(通过使用地理编码器 API)。 我希望我的应用能够在两个 Activity 之间传输我的类的一个实例,并返回结果,这样的结果也是该类的一个实例。
我已经编写了我的类的声明来实现 Parcelable 类,像这样(我的类名是 OnePlace):
public class OnePlace implements Parcelable {
private LatLng position;
private String address;
…
}
我已经实现了“OnePlace”类,其方法能够实现 Parcelable,正如 Android 开发人员在线文档中推荐的那样: https://developer.android.com/reference/android/os/Parcelable
一切正常,我能够将我的类的一个实例从一个活动转移到另一个活动,然后再取回另一个实例。
这是我添加类的实例作为与意图一起发送的数据的 sn-p 代码:
OnePlace item = new OnePlace(); // create an instance of the class with default values
Intent mapIntent = new Intent(adapterView.getContext(), MapsActivity.class);
mapIntent.putExtra("place", item); // add the item as extra data to the intent
startActivityForResult(mapIntent, 35);
在被调用的活动(此处为 MapsActivity)中,我能够重建类实例的精确副本。
无论如何,这行得通,我对此很满意。
现在,我想将我的类的实例存储在一个文件中,当我下次启动我的应用程序时将读取该文件(一种永久存储的方法)。
为此,我在我的活动的 finish() 方法中使用以下代码 sn-p(就在离开我的应用程序之前):
FileOutputStream outStream = openFileOutput("myFile.tmp", Context.MODE_PRIVATE);
ObjectOutputStream objectStream = new ObjectOutputStream(outStream);
objectStream.writeObject(item);
objectStream.close();
outStream.close();
如您所见,我使用 ObjectOutputStream 类和 FileOutputStream 类来写入文件。 item 对象是我的 OnePlace 类的一个实例。我想将这个实例永久存储到一个文件中,以便下次能够取回它。
当我调用 writeObject(...) 方法时,调用以异常“Object not serializable”结束。看了一些网上的文档,明确的说我要“序列化”的类要实现Serializable接口(这个是强制的!)。
因此,我像这样更新了类的定义:
public class OnePlace implements Parcelable, Serializable {
private LatLng position;
private String address;
…
我稍微修改了我的类的定义以实现 Parcelable 和 Serializable 接口。我不知道这是否是满足我需求的最佳方式……
当我想调用 intent.putExtra("key", item); 时,出现错误。事实上,Java 编译器抱怨它不知道它应该实现哪个 putExtra 接口:带有 Parcelable 接口的接口还是带有 Serializable 接口的接口?它的反应似乎是合乎逻辑的,我认为如果我是人类编译器,我可能会问同样的问题。
那么,现在,我该如何解决这个问题?有人有想法吗?也许,我想实现我的两个目标(将类实例转移到另一个活动并永久存储一个实例)的方式不是最好的方式?你有什么建议吗?
非常感谢您的回答。
查尔斯
【问题讨论】:
-
我可能会通过 GSON 序列化为文本,或者序列化到数据库(Room、Realm、ObjectBox 等)
-
我读到有一些可能性可以将类实例“导出”到 JSON 对象中。我想我会试一试……
标签: android parcelable serializable