2016-07-06 3 views
1

Я сделал внешний объект - Пользователь. Он отлично работает при записи и чтении из хранилища, за исключением случаев, когда я выхожу из приложения и снова его открываю. Тогда эта ошибка:EOFException при чтении файла из хранилища (cn1)

java.io.EOFException на java.io.DataInputStream.readFully (DataInputStream.java:197) в java.io.DataInputStream.readUTF (DataInputStream.java:609) в java.io.DataInputStream.readUTF (DataInputStream.java:564) в com.codename1.io.Util.readUTF (Util.java:962)

Я зарегистрировал класс следующим образом в Statemachine:

@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.write(userID); 

С:

out.writeInt(userID); 

Способ записи по умолчанию является эквивалентом writeByte.

+0

большое спасибо @Shai – roblin

+0

Мое удовольствие. FYI, когда ответ правильный, вам нужно принять его с галочкой рядом с ответом. Повышенный рейтинг также вежлив для хороших ответов. Обратите внимание, что вы получаете дополнительные баллы при принятии ответов, которые помогают вам получить доступ к большей функциональности в stackoverflow и улучшают работу сайта. –

Смежные вопросы