Codenameone如何外部化Location对象

问题描述 投票:1回答:1

我尝试添加外部化位置时收到以下错误消息。请告知如何外部化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;
}

  }
codenameone
1个回答
0
投票

Location不可外部化。它不明确支持对象序列化。通常,您需要转换写入/读取数据以使用位置数据而不是位置对象。但是,由于您的代码是通用的,因此您需要扩展位置以实现外部化。

public class ExternalizableLocation extends Location implements Externalizable {
    // implement the externalizable interface here...
}

在你的init(Object)类中注册ExternalizableLocation作为可外部化的,并且在你存储Location对象的每个地方都用ExternalizableLocation替换它。

© www.soinside.com 2019 - 2024. All rights reserved.