2011-10-20 43 views
2

我是新來的簡單的XML庫。我很喜歡它,但我遇到了問題。Android上的簡單XML - 類MyArrayList <E>擴展ArrayList <E>?

這裏是我的類(某些代碼已被刪除,使其更簡潔):

@Root 
@ElementList 
public class MyArrayList<E> extends ArrayList<E>{ 

public void ToXml() throws Exception{ 
      Serializer serializer = new Persister(); 
      File file = new File("somewhere in my file system"); 
      serializer.write(this, file); 
    } 
} 

¬

@Root 
public abstract class MediaEntry implements Serializable { 
      private static final long serialVersionUID = 1L; 

      @Element 
      public String Title; 
      @Element 
      public String Description; 
      @Element 
      public String Url; 
      @Element 
      public String LocalPath; 

      public MediaEntry(String title, String description, 
           String url, String localPath) { 
          Title= title; 
          Description= description; 
          Url= url; 
          LocalPath= localPath; 
      } 
} 

¬

public class VideoEntry extends MediaEntry { 
      private static final long serialVersionUID = 1L; 

      public VideoEntry(String title, String description, 
           String url, String localPath) { 

      super(title, description, url, localPath); 
      } 
} 

當我實例MyArrayList添加一些VideoEntries並調用ToXml,我只會得到一個空的根即ie。

<MyArrayList /> 

如何解決這個問題?這是否與MyArrayList是通用的事實有關?

回答

3

該列表必須是一個元素的成員(並沒有單獨的類)以獲得所需的行爲,您可以設置ElementList內聯,因此沒有父元素。

@Root 
public class MyArrayList<E> { 
    @ElementList(inline=true) 
    ArrayList<E> list = new ArrayList<E>(); 

    public boolean add(E entry) { 
     return list.add(entry); 
    } 

    public void ToXml() throws Exception { 
     Serializer serializer = new Persister(); 
     File file = new File("somewhere in my file system"); 
     serializer.write(this, file); 
    } 
} 

只要想到另一個解決方案,它可能會更好的(你可以訪問所有的列表功能 - 但我不知道是否有任何副作用,所以我把我原來的解決方案)

@Root 
public class MyArrayList<E> extends ArrayList<E> {  
    @ElementList(inline=true) 
    MyArrayList<E> list = this; 

    public void ToXml() throws Exception { 
     Serializer serializer = new Persister(); 
     File file = new File("somewhere in my file system"); 
     serializer.write(this, file); 
    } 
} 

反序列化,你必須申報的SimpleXML,whicht元件用於其構造函數參數:

@Root 
public abstract class MediaEntry implements Serializable { 
    private static final long serialVersionUID = 1L; 

    @Element 
    public String Title; 
    @Element 
    public String Description; 
    @Element 
    public String Url; 
    @Element 
    public String LocalPath; 

    public MediaEntry(@Element(name = "Title") String title, 
      @Element(name = "Description") String description, 
      @Element(name = "Url") String url, 
      @Element(name = "LocalPath") String localPath) { 
     Title = title; 
     Description = description; 
     Url = url; 
     LocalPath = localPath; 
    } 
} 

順便說一句,如果你是剛剛開始編程的Java,你可能會考慮閱讀下載g的Java代碼慣例 - 這是不是一個好方法,以大寫字母開始方法和變量名(所以你可以防止習慣壞習慣;-))

+0

這是偉大的,但我現在有問題反序列化。 ..你能建議一種方法來做到這一點? –

+0

這是我得到的錯誤org.simpleframework.xml.core.PersistenceException:構造函數與類VideoEntry不匹配 –

+1

我編輯了我的答案 –

相關問題