将继承的类对象存储在代号为一的存储中

时间:2016-06-06 17:55:53

标签: java storage codenameone

我在java中使用了codenameone框架。 我是一个严重的问题,保存了一个继承自Person类的类农民的对象列表。这两个类都实现了可外化的接口,并且我也正确地在两个类中实现了四个必需的方法(getVersion,externalize,internalize,getObjectId)。我将super.initialize()称为农民类初始化方法的第一行,并对externalize方法也做同样的事情。

我可以保存一个列表,但在关闭并重新启动模拟器后,我似乎无法从存储中读取它。它只给我一个列表,其中第一个元素是Farmer,但其他元素为null.or Date values。

我已经为这几天寻求解决方案了。任何提示或建议都会非常感谢你。提前谢谢。

2 个答案:

答案 0 :(得分:0)

我猜你实现了这样的方法:

public String getObjectId() {
   return getClass().getName();
}

而不是这样:

public String getObjectId() {
   return "MyObject";
}

您需要为类提供唯一的每个对象名称,并且需要对其进行硬编码,因为由于模糊处理,类名可能会因设备而异。

答案 1 :(得分:0)

以下是Person类

的方法
public void externalize(DataOutputStream out) {
            try {
                //Personne
                Util.writeUTF(getNomPersonne(), out);
                Util.writeUTF(getPrenomPersonne(), out);
                Util.writeUTF(getAdressePersonne(), out);
                Util.writeUTF(getLieuNaisPersonne(), out);
                Util.writeUTF(getPhotoPersonne(), out);
                Util.writeUTF(getSituationMatrimonialePersonne(), out);
                Util.writeUTF(getTelPersonne(), out);

                out.writeLong(getIdPersone() == null ? 0 : getIdPersone());
                out.writeInt(getVERSION() == null ? 0 : getVERSION() );
                out.writeChar(getSexePersonne());

                Util.writeObject(getDateNaisPersonne(), out);
                Util.writeObject(getLocalisationPersonne() , out);
            } catch (IOException ex) {
                Dialog.show("Erreur ","L'exception "+ex.getMessage(),"Ok",null);
            }
        }

    public void internalize(int version, DataInputStream in){
            try {
                nomPersonne = Util.readUTF(in);
                prenomPersonne = Util.readUTF(in);
                adressePersonne = Util.readUTF(in);
                lieuNaisPersonne =  Util.readUTF(in);
                photoPersonne = Util.readUTF(in);
                situationMatrimonialePersonne = Util.readUTF(in);
                telPersonne = Util.readUTF(in);

                idPersone = in.readLong();
                VERSION = in.readInt();
                sexePersonne = in.readChar();

                dateNaisPersonne = (Date) Util.readObject(in);
                localisationPersonne = (StructureAdministrative) Util.readObject(in);
            } catch (IOException ex) {
                 Dialog.show("Erreur ","L'exception "+ex.getMessage(),"Ok",null);
            }
        }

这里有来自Person的农民类的方法

@Override
    public void externalize(DataOutputStream out) {
        try {
            //Personne
            super.externalize(out);
            //Agriculteur
            Util.writeUTF(this.getNumPieceIdentite(), out);
            Util.writeUTF(this.getPhotoPieceIdentite(), out);
            Util.writeUTF(this.getPhotoPieceRecto(), out);
            Util.writeUTF(this.getPhotoPieceVerso(), out);
            Util.writeUTF(this.getTelAgripme(), out);

            out.writeInt(this.getNombreEnfant() == null ? 0 : this.getNombreEnfant()  );
            out.writeInt(getTailleMenage() == null ? 0 : getTailleMenage());
            out.writeDouble(getDistanceParcourue() == null ? 0 : getDistanceParcourue());
            out.writeDouble(getDureeAttente() == null ? 0 : getDureeAttente());
            out.writeBoolean(getaPiece() == null ? false : getaPiece());
            out.writeBoolean(getMembreCooperative() == null ? false : getMembreCooperative());
            out.writeInt(getParidPersone() == null ? 0 : getParidPersone());


            Util.writeObject(getDateExpirPiece(), out);
            Util.writeObject(getTypePieceIdentite(), out);
            Util.writeObject(getTypeProprieteFoncier() , out);
            Util.writeObject(getListeChamps(), out);
        } catch (IOException ex) {
            System.out.println("ERREUR DE L'ECRITURE DES AGRICULTEUR EST"+ ex.getMessage());
        }
    }

@Override
public void internalize(int version, DataInputStream in)  {
    try {
        //Personne
        super.internalize(version, in);
        //Agriculteur
        numPieceIdentite = Util.readUTF(in);
        photoPieceIdentite = Util.readUTF(in);
        photoPieceRecto = Util.readUTF(in);
        photoPieceVerso = Util.readUTF(in);
        telAgripme = Util.readUTF(in);

        nombreEnfant = in.readInt();
        tailleMenage = in.readInt();
        distanceParcourue = in.readFloat();
        dureeAttente = in.readFloat();
        aPiece = in.readBoolean();
        membreCooperative = in.readBoolean();
        ParidPersone = in.readInt();


        dateExpirPiece = (Date) Util.readObject(in);
        typePieceIdentite = (TypePieceIdentite) Util.readObject(in);
        typeProprieteFoncier = (TypeProprieteFoncier) Util.readObject(in);
        listeChamps = (ArrayList<Champ>) Util.readObject(in);
    } catch (IOException ex) {
        System.out.println("LA LECTURE DES AGRICULTEURS DE LA BASE A TEL PROBLÈME "+ ex.getMessage());
    }
}