我尝试添加外部化位置时收到以下错误消息。请告知如何外部化Location对象。请指教。请参阅用于存储和外部化代码的代码:
addOfflineCommand("location", latitude, longitude, time1);
latitude - double data type;
longitude - double data type;
time1 - long data type;
private void addOfflineCommand(String name, Object... args) {
List<OfflineCommand> l_noAppt = (List<OfflineCommand>)
Storage.getInstance().readObject(appName + user + "-offlineCommandsLocEnc");
l_noAppt.add(new OfflineCommand(name, args));
}
请参阅下面的错误消息:
[EDT] 0:4:37,444 - Exception: java.io.IOException - Object type not supported: com.codename1.location.Location value: altitude = 1000.0
latitude40.714353
longtitude-74.00597299999998
direction0.0
timeStamp1529000278457
velocity50.0
at java.io.DataInputStream.readFully(DataInputStream.java:197)
at java.io.DataInputStream.readUTF(DataInputStream.java:609)
at java.io.DataInputStream.readUTF(DataInputStream.java:564)
at com.codename1.io.Util.readObject(Util.java:562)
at com.codename1.io.Util.readObject(Util.java:595)
at com.X.Xmobile.server.OfflineCommand.internalize(OfflineCommand.java:40)
at com.codename1.io.Util.readObject(Util.java:689)
at com.codename1.io.Util.readObject(Util.java:664)
at com.codename1.io.Storage.readObject(Storage.java:261)
at com.X.Xmobile.server.ServerImpl.addOfflineCommand(ServerImpl.java:1165)
at com.X.Xmobile.server.ServerImpl.finishActivity(ServerImpl.java:1504)
at com.X.Xmobile.forms.CommentForm.lambda$new$3(CommentForm.java:70)
java.io.IOException: Object type not supported: com.codename1.location.Location value: altitude = 1000.0
latitude40.714353
longtitude-74.00597299999998
direction0.0
timeStamp1529000278457
velocity50.0
at com.codename1.io.Util.writeObject(Util.java:457)
at com.codename1.io.Util.writeObject(Util.java:394)
at com.X.Xmobile.server.OfflineCommand.externalize(OfflineCommand.java:34)
at com.codename1.io.Util.writeObject(Util.java:258)
at com.codename1.io.Util.writeObject(Util.java:286)
at com.codename1.io.Storage.writeObject(Storage.java:224)
at com.X.Xmobile.server.ServerImpl.addOfflineCommand(ServerImpl.java:1201)
at com.X.Xmobile.server.ServerImpl.finishActivity(ServerImpl.java:1504)
[EDT] 0:6:4,551 - Exception: java.io.IOException - Object type not supported: com.co
以下是创建的用于外部化的类OfflineCommand类。
public class OfflineCommand implements Externalizable {
private static final int VERSION = 1;
private String name;
private Object[] arguments;
public OfflineCommand() {}
public OfflineCommand(String name, Object... args) {
this.name = name;
this.arguments = args;
}
@Override
public int getVersion() {
return VERSION;
}
@Override
public void externalize(DataOutputStream out) throws IOException {
Util.writeUTF(name, out);
Util.writeObject(arguments, out);
}
@Override
public void internalize(int version, DataInputStream in) throws IOException {
name = Util.readUTF(in);
arguments = (Object[])Util.readObject(in);
}
@Override
public String getObjectId() {
return "OfflineCommand";
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Object[] getArguments() {
return arguments;
}
public void setArguments(Object[] arguments) {
this.arguments = arguments;
}
}
Location
不可外部化。它不明确支持对象序列化。通常,您需要转换写入/读取数据以使用位置数据而不是位置对象。但是,由于您的代码是通用的,因此您需要扩展位置以实现外部化。
public class ExternalizableLocation extends Location implements Externalizable {
// implement the externalizable interface here...
}
在你的init(Object)
类中注册ExternalizableLocation
作为可外部化的,并且在你存储Location
对象的每个地方都用ExternalizableLocation
替换它。