【问题标题】:Android socket stream using serializable, error: java.lang.NullPointerException使用可序列化的 Android 套接字流,错误:java.lang.NullPointerException
【发布时间】:2012-10-30 09:43:57
【问题描述】:

我正在使用 Serializable 进行数据传输。以下是我在 Serializable 中的类暗示。

public class UserAction implements Serializable{

/**
 *
 */
private static final long serialVersionUID = 1L;

public int userID;
public transient Path path;
public transient Paint paint;

public UserAction(){
    path = new Path();
    paint = new Paint();
}

public UserAction(int ID, Path path, Paint paint){
    setUserID(ID);
    setPath(path);
    setPaint(paint);
}

public void setUserID(int ID){
    this.userID = ID;
}

public void setPath(Path path){
    this.path.set(path);
}

public void setPaint(Paint paint){
    this.paint.set(paint);
}

}

输出流是这样的:

 client = new Socket("localhost", 54321);
 ObjectOutputStream out = new ObjectOutputStream(client.getOutputStream());
 out.writeObject(action);
 out.close();
 client.close();

输入流是:

 ObjectInputStream in = new ObjectInputStream(client.getInputStream());
 rec_action = (UserAction) in.readObject();
 in.close();

但是当我使用从输入流中得到的 rec_action 时。 rec_action 不是 Null,但它的成员路径和绘制都是 NULL!获取 java.lang.NullPointerException .

【问题讨论】:

    标签: android sockets nullpointerexception serializable


    【解决方案1】:

    您将这些成员标记为transient,因此序列化会跳过它们。那就是那个关键字的定义。

    【讨论】:

    • 感谢 zienkikk。但是当移除瞬态时,又出现了一个错误:**java.io.NotSerializableException: android.graphics.Paint**.
    • 那是因为 Path 和 Paint 没有实现 Serializable 或 Externalizable。您应该阅读一些序列化教程并为该任务编写自己的自定义例程。
    • 好吧,我明白了。谢谢@zienkikk!
    猜你喜欢
    • 2014-04-21
    • 2011-05-09
    • 2013-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-15
    • 1970-01-01
    相关资源
    最近更新 更多