2016-07-06 16 views
1

私は外部化可能なオブジェクトUserを作成しました。それは、私がアプリを終了し、それを再び開く以外は、ストレージに書き込んだり、ストレージから読み込んだりするときにうまく動作します。このエラーが発生します。ストレージからファイルを読み取っているときのEOFException

java.io.EOFExceptionを java.io.DataInputStream.readFully(DataInputStream.java:197)で java.io.DataInputStream.readUTF(DataInputStream.java:609)で で com.codename1.io.Util.readUTF(Util.java:962)

でjava.io.DataInputStream.readUTF(DataInputStream.java:564)以下のように私はステートマシンでクラスを登録しています

@Override 
    protected void initVars(Resources res) { 
     Util.register("User", User.class); 
} 
package userclasses; 

import com.codename1.io.Externalizable; 
import com.codename1.io.Util; 
import java.io.DataInputStream; 
import java.io.DataOutputStream; 
import java.io.IOException; 
import java.util.Date; 

/** 
* 
* 
*/ 
public class User implements Externalizable { 

    private static final int VERSION = 1; 

    public int userID; 
    public String username; 
    public String password; 
    public String firstname; 
    public String surname; 
    public String email; 
    public Date registerDate; 
    public boolean paidUser; 
    public double runStep; 
    public double walkStep; 



    public User(){ 
    } 

    @Override 
    public int getVersion() { 
     return VERSION; 

    } 

    @Override 
    public void externalize(DataOutputStream out) throws IOException { 
     out.write(userID); 
     Util.writeUTF(username, out); 
     Util.writeUTF(password, out); 
     Util.writeUTF(firstname, out); 
     Util.writeUTF(surname, out); 
     Util.writeUTF(email, out); 
     out.writeLong(registerDate.getTime()); 
     out.writeBoolean(paidUser); 
     out.writeDouble(runStep); 
     out.writeDouble(walkStep); 

    } 

    @Override 
    public void internalize(int version, DataInputStream in) throws  IOException { 
     userID = in.readInt(); 
     username = Util.readUTF(in); 
     password = Util.readUTF(in); 
     firstname = Util.readUTF(in); 
     surname = Util.readUTF(in); 
     email = Util.readUTF(in); 
     registerDate = new Date(in.readLong()); 
     paidUser = in.readBoolean(); 
     runStep = in.readDouble(); 
     walkStep = in.readDouble(); 

    } 

    @Override 
    public String getObjectId() { 
     return "User"; 
    }  
} 

答えて

0

を置き換えます:

out.writeInt(userID); 

デフォルトの書き込み方法はwriteByteのと同等です:付き

out.write(userID); 

これはクラスです。

+0

ありがとうございます@シャイ – roblin

+0

私の喜びです。参考にしてください。答えが正しいときは、答えの隣にあるチェックマークを使ってそれを受け入れる必要があります。アップヴォートも良い答えのために丁寧です。スタックオーバーフローでより多くの機能にアクセスし、サイトの操作性を向上させるのに役立つ回答を受け入れる場合、追加のポイントも得られることに注意してください。 –

関連する問題