首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Codenameone如何外部化Location对象

Codenameone如何外部化Location对象
EN

Stack Overflow用户
提问于 2018-06-15 03:14:44
回答 1查看 54关注 0票数 1

当我尝试为外部化添加位置时,我收到以下错误消息。请建议如何外部化Location对象。请给我建议。参见用于存储和外部化代码的代码:

代码语言:javascript
复制
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));
}

请查看下面的错误消息:

代码语言:javascript
复制
[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类。

代码语言:javascript
复制
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;
}

  }
EN

回答 1

Stack Overflow用户

发布于 2018-06-15 12:08:01

Location是不可外部化的。它不显式地支持对象序列化。通常,您需要将读/写数据转换为使用location数据而不是location对象。但是,由于您的代码是泛型的,因此您需要扩展location来实现externalizable。

代码语言:javascript
复制
public class ExternalizableLocation extends Location implements Externalizable {
    // implement the externalizable interface here...
}

在您的init(Object)类中,将ExternalizableLocation注册为可外部化的,并且在存储Location对象的每个位置,将其替换为ExternalizableLocation

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50864400

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档