Я сделал внешний объект - Пользователь. Он отлично работает при записи и чтении из хранилища, за исключением случаев, когда я выхожу из приложения и снова его открываю. Тогда эта ошибка: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";
}
}
большое спасибо @Shai – roblin
Мое удовольствие. FYI, когда ответ правильный, вам нужно принять его с галочкой рядом с ответом. Повышенный рейтинг также вежлив для хороших ответов. Обратите внимание, что вы получаете дополнительные баллы при принятии ответов, которые помогают вам получить доступ к большей функциональности в stackoverflow и улучшают работу сайта. –