gpt4 book ai didi

java - Android中通过蓝牙发送/接收对象

转载 作者:行者123 更新时间:2023-12-01 11:11:42 25 4
gpt4 key购买 nike

我正在尝试使用 ObjectOutputStream 将对象发送到运行 android 的另一台设备。我不断收到 ClassNotFoundException。

我的类实现了可序列化。我还没有尝试使用 Parcelable 实现序列化,通过蓝牙将对象发送到另一个设备。有人尝试过吗?请问您的意见?谢谢

可序列化或可打包是实现我的目的的正确方法吗?

最佳答案

//mmSocket is the socket i got from a bluetooth connection
//this is for sending an object
public void writeSerialized(){
Object contact = new Contact("Allen", "Patterson", "256-369-241");
try {
ObjectOutputStream oos = new ObjectOutputStream(mmSocket.getOutputStream());
oos.writeObject(contact);
oos.close();
}catch(Exception e){
Log.e(TAG, "Error ObjectOutputStream: "+e.getLocalizedMessage());
}
}

//mmInputStream是我从socket获取的Stream。这是接收方的

 public void run() {
// Keep listening to the InputStream while connected
while (true) {

try {

ObjectInputStream ois = new ObjectInputStream(mmInStream);
Object contact = ois.readObject();
Log.i(TAG,"Contact class: "+contact);

} catch (IOException | ClassNotFoundException e) {
Log.i("ERROR", "E:"+e.getLocalizedMessage());
}
}
}

//我尝试以其他尺寸发送和接收的对象

public class Contact implements Serializable{

static final long serialVersionUID = 123456789123456789L;

private String id;
private String name;
private String phoneNumber;

public Contact(){}

public Contact(String id, String name, String phoneNumber) {
this.id = id;
this.name = name;
this.phoneNumber = phoneNumber;
}

public String getId() {
return id;
}

public void setId(String id) {
this.id = id;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public String getPhoneNumber() {
return phoneNumber;
}

public void setPhoneNumber(String phoneNumber) {
this.phoneNumber = phoneNumber;
}

}

解决方案是在应用程序两侧使用相同的包名来实现 Serialized 类。例如 com.shared.models 并为可序列化类提供相同的 SerialVersionUID。这为我解决了这个问题

关于java - Android中通过蓝牙发送/接收对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32289816/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com