2013-02-27 2 views
0

Мне нужно разработать одно приложение для анализа xml с использованием парсера sax.android sax parser handler

У меня есть следующие ниже корма 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> 

Здесь я создать один класс для геттер и сеттер:

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 (список) типа Laptop не применяется для аргументов (String)

Как я могу решить, что error.please дать мне решение для них ...

ответ

2

Ошибка говорит, что yon не может представить экземпляр String в экземпляр List. И это вполне разумно. С

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

принимает список как параметр.

Как можно исправить, вы можете попробовать таким образом, если вы хотите сохранить List из String (статьи) для каждого ноутбук, например

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

смена частного вида модель; для частной модели String; –

+0

@blackbelt разрешен выше error.but, становится ниже ошибки. Метод setText (CharSequence) в типе TextView не применим для аргументов (список ) на этой строке holder.txtModel.setText (laptop.getModel()); – user2098063

+1

- та же ошибка. Если метод требует как параметр a String, вы не можете передать ему List of String. Выберите строку, которую нужно отобразить, и получите ее из списка. Вы действительно должны прочитать документацию, но в первую очередь вам следует четко продумать, чего вы хотите достичь и как. Это только предположение – Blackbelt

0

Как @blackbelt пытался объяснить, можно только присвоить значение которые принимаются методом. TextView.setText(CharSequence) принимает CharSequence, так что вы должны поставить строку, в то время как getModel() возвращает список Строка List<String>

0

Я не мотивирует вас код, как этот путь, но вы можете избежать класс модели и отдать свой тип данных в обработчике class like this:

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