2016-06-06 4 views
1

Ich verwende das Codenameon-Framework mit Java. Ich habe ein ernstes Problem beim Speichern einer Liste von Objekten eines Klassenfarmers, der von einer Klassenperson erbt. Beide Klassen implementieren die externalisierbare Schnittstelle und ich habe die vier erforderlichen Methoden (getVersion, externalize, internalize, getObjectId) auch in beiden Klassen korrekt implementiert. Ich rufe super.initialize() als die erste Zeile der Initialize-Methode in der Farmer-Klasse auf und mache das gleiche auch für die Externalize-Methode.Store geerbt Klassenobjekt in Codename einen Speicher

Ich kann eine Liste speichern, aber ich kann es anscheinend nicht aus dem Speicher lesen, nachdem ich den Simulator geschlossen und neu gestartet habe. Es gibt mir nur eine Liste mit dem ersten Element, das ein Farmer ist, aber anderen Elementen, die null sind. Oder Datumswerte.

Ich habe seit mehreren Tagen nach Lösungen gesucht. Jeder Tipp oder Rat würde von Ihnen sehr geschätzt werden. Vielen Dank im Voraus.

Antwort

0

Ich vermute, dass Sie diese Methode so implementiert:

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

Statt wie folgt aus:

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

Sie benötigen einen einzigartigen pro Objektnamen für eine Klasse geben und müssen haben Sie es hardcoded, da sich die Klassennamen auf den Geräten aufgrund der Verschleierung unterscheiden können.

+0

Dank von Person erbt. Ich habe die Methode getObjectId bereits so implementiert, wie Sie es vorgeschlagen haben, aber ich habe immer noch den Fehler. Ich gebe "Farmer" in der Bauernklasse und "Person" in der Personenklasse zurück. Da ich keine Instanz von Person speichern sollte, sollte sie Externalizable auf die gleiche Weise wie die anderen Klassen implementieren? Ich habe auch ein Attribut, das ist die Liste der Felder, die der Bauer hat und welcher Typ ist java.util.List . Ich habe andere spezifische Klassen Objekte Attribute in beiden Klassen, aber alle korrekt registriert. Haben Sie eine andere Idee, warum ich könnte in einem solchen Problem laufen? –

+0

Haben Sie beide mit der util-Klasse registriert? Wo hast du den Registrierungscode eingetragen? –

+0

Ja, ich habe beide Klassen mit der Util-Klasse registriert und der Code ist in der Initvars-Methode (es ist ein GUI-Bluidler-Projekt) –

0

Hier sind die Methoden für die Klasse 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); 
      } 
     } 

hier eine der Methoden für den Landwirt Klasse kommen, die für die schnelle Antwort Shai

@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()); 
    } 
} 
Verwandte Themen