我需要你的帮助。
我正在使用TCP连接在java服务器和Android应用程序客户端之间建立TCP连接。 假设我将发送一个序列化对象,但是每次在客户端,代码都被阻止在Obj =(Person)in.readObject;其中in是数据objectinputstream,Person是序列化对象。
但是,如果我发送字符串或整数是字符串,代码正在工作,我用于Obj = in.readObject;直接
所以,我需要知道我能添加什么才能成功反序列化。
或者可能是arraylist只是字符串,所以我想做什么
lst = (ListView) findViewById(R.id.list);
al = new ArrayList<String>();
ad = new ArrayAdapter<String>(this,R.layout.list, al);
try {
socket = new Socket("192.168.0.103", 8888);
in = new ObjectInputStream(socket.getInputStream());
Object obj = null;
while ((obj = in.readObject()) != null) {
if (obj instanceof Person) {
al.add(((Person) obj).toString());
lst.setAdapter(ad);
}}
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
finally{
if (in != null){
try {
in.close();
} catch (IOException e) {
e.printStackTrace();
}
try {
socket = serverSocket.accept();
oos = new ObjectOutputStream(socket.getOutputStream());
Person person = new Person();
person.setFirstName("James");
person.setLastName("Ryan");
person.setAge(19);
String a = "Ahmed";
oos.writeObject(a);
oos.writeObject(person);
} catch (FileNotFoundException ex) {
ex.printStackTrace();
}catch (IOException e) {
e.printStackTrace();
}
finally{
if( oos!= null){
try {
oos.flush();
oos.close();
} catch (IOException e) {
e.printStackTrace();
}
public class Person implements Serializable {
private String firstName;
private String lastName;
private int age;
public Person() {
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String toString() {
StringBuffer buffer = new StringBuffer();
buffer.append(firstName);
buffer.append("\n");
buffer.append(lastName);
buffer.append("\n");
buffer.append(age);
buffer.append("\n");
return buffer.toString();
}
答案 0 :(得分:0)
这里有几个问题。
首先,readObject()在EOS时不返回null,因此循环条件错误。它抛出EOFException,所以你需要抓住它。
其次,我不知道你为什么要使用序列化,如果你想要的只是接收对象上的toString()的结果。
第三,你的代码中没有任何东西抛出FileNotFoundException,所以你为什么要捕获它是一个谜。
第四,如果收到的对象不是Person的实例,那么你的代码就无法表现出来。