我有一个客户端(Android应用程序)和一个服务器。我想从客户端向服务器发送一个对象。我从Netbeans运行服务器,从Eclipse运行客户端。问题是服务器端的对象为null。我已经在类中添加了包,因此它存在于服务器项目和客户端项目中。
客户:
out = new ObjectOutputStream(socket.getOutputStream());
out.flush();
in = new ObjectInputStream(socket.getInputStream());
if(quiz != null) {
Log.e("Name", quiz.getName()); //
}
out.writeObject(quiz);
out.flush();
socket.close();
out.close();
in.close();
日志正在写测验的名称,所以它不是null。服务器是多线程的,客户端通信器的关键部分如下所示:
Quiz quiz = null;
try {
in = null;
ut = null;
try {
in = new ObjectInputStream(socket.getInputStream());
ut = new ObjectOutputStream(socket.getOutputStream());
quiz = (Quiz)in.readObject();
} catch (IOException ex) {
server.disconnected(socket.getInetAddress().getHostAddress());
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
if(quiz == null) {
System.out.println("Something is wrong");
}
socket.close();
in.close();
ut.close();
服务器正在打印“Something is wrong”,因此该对象为null。我将thep包com.example.quiz移动到了server-project中的Source包 - 文件夹,因此它应该是两端的同一个对象。该对象的类也在实现Serializable。
有什么不对?
答案 0 :(得分:0)
服务器正在打印"出现问题",因此对象为空。
没有。服务器正在打印"出了问题"所以要么对象是空或你抓住了一个可能的例外。使用quiz
的代码应位于try
块内,而不是在所有catch
块之后。如果您真的从null
收到ObjectInputStream.readObject()
,那只能是因为您使用null
ObjectOutputStream.writeObject().