2016-06-06 56 views
1

我正在使用java的codenameone框架。 我一直是一個嚴重的問題,保存從類Person繼承的類農民的對象的列表。這兩個類都實現了可外部化的接口,並且我已經在兩個類中正確實現了四個必需的方法(getVersion,externalize,internalize,getObjectId)。我將super.initialize()作爲農民類中初始化方法的第一行,並對外部化方法也做同樣的事情。在代碼名爲1的存儲中存儲繼承的類對象

我可以保存一個列表,但我似乎無法在關閉並重新啓動模擬器後從存儲中讀取它。它只給了我一個列表,其中第一個元素是Farmer,但其他元素是null或Date值。

我一直在尋找這方面的解決方案好幾天。任何提示或建議將非常感謝你。先謝謝你。

回答

0

我猜你實現了這個方法類似:

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

,而不是像這樣:

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

你需要給每個對象名稱的唯一一類和需要請將其硬編碼,因爲混淆會導致設備上的類名稱可能有所不同。

+0

感謝您的快速回答釃農民類的方法。我已經按照你的建議實現了getObjectId方法,但是我仍然有錯誤。我返回農民階層的「農民」和人物階層的「人物」。因爲我沒有存儲Person的實例,所以它甚至可以像其他類一樣實現Externalizable?我還有一個屬性,它是農民所擁有的字段列表,以及哪種類型是java.util.List 。我在這兩個類中都有其他特定的類對象屬性,但都已正確註冊。您有任何其他想法,爲什麼我可能會在這樣的問題上運行? –

+0

你註冊都使用util類嗎?你把註冊碼放在哪裏? –

+0

是的,我沒有註冊這兩個類與Util類和代碼是在initVars mehod(這是一個gui bluidler項目) –

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); 
      } 
     } 

的這裏的方法來爲從個人

繼承
@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()); 
    } 
}