2013-02-27 109 views
0

我使用SAX解析器來開發一個XML分析程序。的Android SAX解析器處理程序

我必須遵循以下XML提要:

<root> 
    <Categories> 
     <Category name="Photos"> 
      <article articleid="4537" title="Sonam-Steals-the-Mai-Show"/> 
      <article articleid="4560" title="Big-B-Croons-For-World-Peace"/> 
       <article articleid="4585" title="Yami-Paints-The-Town-Red"/> 
     </Category> 
     <Category name="Style"> 
      <article articleid="266" title="Dita wows us in a sari"/> 
      <article articleid="268" title="Frieda is a natural"/> 
      <article articleid="269" title="Demi finds love in Jodhpur"/> 
     </Category> 
    </Categories> 
    </root> 

在這裏,我已經創建getter和setter一個類:

public class Laptop { 
      private String brand; 
      private List<String> model; 
      public String getBrand() { 
      return brand; 
      } 

     public void setBrand(String brand) { 
       this.brand = brand; 
       } 
     public List<String> getModel() { 
      return model; 
      } 
     public void setModel(List<String> string) { 
      this.model = string; 
     } 

我的XML處理程序看起來像下面的代碼:

public void startElement(String uri, String localName, String qName, 
     Attributes attributes) throws SAXException { 
    current = true; 
     if (localName.equals("Category")) { 
     laptop = new Laptop(); 
     laptop.setBrand(attributes.getValue("name")); 

    } 

    else if (localName.equals("article")) { 
      laptop.setModel(attributes.getValue("title")); 
     } 
     } 

public void characters(char[] ch, int start, int length) 
     throws SAXException { 
    if(current) 
    { 
     currentValue = new String(ch, start, length); 
     current=false; 
    } 
     } 

    public void endElement(String uri, String localName, String qName) 
     throws SAXException { 
      current = false; 
     if (localName.equals("Category")) { 
      // add it to the list 
      laptops.add(laptop); 

     } 
    if (localName.equals("article")) { 
     laptop.getModel().add(currentValue); 
     } 

這裏我得到下面的錯誤對這些行:

  laptop.setModel(attributes.getValue("title")); 

在筆記本型的方法則setModel(名單)不適用於

我怎樣才能解決error.please的參數(字符串)給我這些解決方案...

回答

2

錯誤說馮不能assing一個String實例的List實例。這是相當合理的。由於

public void setModel(List<String> string) { 
      this.model = string; 
} 

以List爲參數。

加以修正,你可以嘗試以這種方式,如果你想保持StringList一(條),每筆記本實例

public void setModel(String string) { 
     if (this.model == null) 
      this.model = new List<String>();  
     this.model.add(string); 
} 
+0

更改私人表 model;以私人字符串模型; – 2013-02-27 09:24:34

+0

@blackbelt解決上面error.but獲取下面的錯誤TextText類型中的方法setText(CharSequence)不適用於這些行上的參數 \t(列表)holder.txtModel.setText(laptop.getModel()); – user2098063 2013-02-27 09:32:23

+1

是相同的錯誤。如果一個方法需要一個字符串作爲參數,你不能將它傳遞給一個字符串列表。選擇需要顯示的字符串並從列表中獲取。你應該真的閱讀文檔,但首先你應該清楚自己想要達到什麼以及如何實現。這些只是建議 – Blackbelt 2013-02-27 09:37:56

0

至於@blackbelt試圖解釋,你只能分配值這被一種方法所接受。 TextView.setText(CharSequence)接受CharSequence所以你應該提供一個字符串,而getModel()返回字符串List<String>

0

我不是激勵你的代碼像這樣的名單,但你可避免模型類和投內部處理程序數據類型類似如下:

public void startElement(String uri, String localName, String qName, 
      Attributes attributes) throws SAXException { 
     currentElement = true; 
     db = new DatabaseHelper(thecontext); 
     if (qName.equals("Asa.Amms.Data.Entity.User")) { 
      int length = attributes.getLength(); 
      for (int i = 0; i < length; i++) { 
       String name = attributes.getQName(i); 
       if (name.equals("Id")) { 
        id = Integer.parseInt(attributes.getValue(i)); 
       } 
       if (name.equals("Login")) { 
        LoginID = attributes.getValue(i).toString(); 
       } 
       if (name.equals("Name")) { 
        Name = attributes.getValue(i).toString(); 
       } 
       if (name.equals("Password")) { 
        Password = attributes.getValue(i).toString(); 
       } 
       if (name.equals("ProgramOfficerId")) { 
        user_ProgramOfficerId = Integer.parseInt(attributes.getValue(i).toString()); 
       } 
      }  
      db.insertUser(id, LoginID, Name, Password, user_ProgramOfficerId); 
     } 
}