从Android应用程序(客户端)向计算机(服务器)发送自定义对象

时间:2013-11-10 23:32:37

标签: java android networking

我试图将一个对象从我的Android手机发送到我的电脑,但我一直收到这个错误,它无法识别这个对象的类。这很奇怪,因为当我试图从计算机向自己发送一个ocject时,它使用相同的方式工作。这两个包都有User类,它实现了Serializable。请告诉我它为什么会发生。

计算机(服务器):

private ServerSocket server;
private ObjectInputStream input;
private Socket connection;
private User message;

public void brains() throws IOException {
    while (true) {
        System.out.println("waiting for connection...");
        try {
            server = new ServerSocket(4567, 100);
            connection = server.accept();
            System.out.println("you are now conected");
        } catch (IOException ioException) {
            ioException.printStackTrace();
        }
        System.out.println("Setting up Streams..");

        input = new ObjectInputStream(connection.getInputStream());
        try {
            message = (User) input.readObject();
        } catch (ClassNotFoundException ex) {
            System.out.println("I dont know wtf");
        }

        System.out.print("the user ");
        message.printUserName();
        System.out.print(", used your app at ");
        message.printTime();
        System.out.println("");
                    System.out.println("Shutting down!");
        try {
            input.close();
            connection.close();
            server.close();
        } catch (IOException ioException) {
            ioException.printStackTrace();
        }

    }

}

电话(客户):

private User user;
private Socket connection;
private ObjectOutputStream output;

public void run() {

    try{
    connection = new Socket (InetAddress.getByName(ip), 4567);
    output = new ObjectOutputStream(connection.getOutputStream()) ;

    user = new User("bla bla", "14:09");
    output.writeObject(user);
    output.flush();



    }catch(Exception e){
        System.out.print(e);
    }finally{
        try{
        output.close();
        connection.close();
        }
    catch(Exception e){
        System.out.print(e);
    }




    }



}

这是控制台日志:

waiting for connection...
you are now conected
Setting up Streams..
Dont recognize the class
the user Exception in thread "main" java.lang.NullPointerException
at whosUsing.whosUsing.brains(whosUsing.java:34)
at whosUsing.test.main(test.java:9)

2 个答案:

答案 0 :(得分:0)

如果某个类在客户端和服务器中的包不完全相同,则系统将无法识别所通过的类。

将User.java文件放在同一个包中:“com.myapp.shared.User”。这应该可以解决你的问题。

请参阅readobject method throws ClassNotFoundException了解类似问题。

答案 1 :(得分:0)

确保手机上客户端的软件包名称和类名必须与计算机上的服务器端完全相同。 看看这个。希望有所帮助

ObjectInputStream readObject(): ClassNotFoundException