2010-12-03 78 views
0

我已經看到了簡化Android SAX XML解析的方法。簡化Android SAX XML解析問題

http://www.ibm.com/developerworks/opensource/library/x-android/

我已經分析的數據,但我似乎無法得到它的顯示,使用環TextViews屏幕。

這是我AndroidSaxFeedParser類...

public class AndroidSaxFeedParser extends BaseFeedParser{ 

final MagazineList magazineList = new MagazineList(); 

    protected AndroidSaxFeedParser(String magazinefeaturedURL) { 
     super(magazinefeaturedURL); 
     // TODO Auto-generated constructor stub 
    } 

    @Override 
    public List<MagazineList> parse() { 
     // TODO Auto-generated method stub 


     RootElement root = new RootElement("maintag"); 

     final List<MagazineList> magazines = new ArrayList<MagazineList>(); 
     Element item = root.getChild("item"); 

     item.setEndElementListener(new EndElementListener(){ 

      @Override 
      public void end() { 
       // TODO Auto-generated method stub 
       magazines.add(magazineList); 
      } 

     }); 

     item.getChild("name").setEndTextElementListener(new EndTextElementListener(){ 
      @Override 
      public void end(String name) { 
       // TODO Auto-generated method stub 
       magazineList.setName(name); 
      } 
     }); 


     item.getChild("imgurl").setEndTextElementListener(new EndTextElementListener() { 

      @Override 
      public void end(String imgurl) { 
       // TODO Auto-generated method stub 
       magazineList.setImgurl(imgurl); 
      } 
     }); 

     item.getChild("date").setEndTextElementListener(new EndTextElementListener() { 

      @Override 
      public void end(String date) { 
       // TODO Auto-generated method stub 
       magazineList.setDate(date); 
      } 
     }); 

     item.getChild("description").setEndTextElementListener(new EndTextElementListener() { 

      @Override 
      public void end(String description) { 
       // TODO Auto-generated method stub 
       magazineList.setDescription(description); 
      } 
     }); 

     item.getChild("price").setEndTextElementListener(new EndTextElementListener() { 

      @Override 
      public void end(String price) { 
       // TODO Auto-generated method stub 
       magazineList.setPrice(price); 
      } 
     }); 

     item.getChild("download").setEndTextElementListener(new EndTextElementListener() { 

      @Override 
      public void end(String download) { 
       // TODO Auto-generated method stub 
       magazineList.setDownload(download); 
      } 
     }); 


     return magazines; 
    } 

} 

這是我的對象模型類...

public class MagazineList { 

private ArrayList<String> name = new ArrayList<String>(); 
private ArrayList<String> imgurl = new ArrayList<String>(); 
private ArrayList<String> date = new ArrayList<String>(); 
private ArrayList<String> price = new ArrayList<String>(); 
private ArrayList<String> description = new ArrayList<String>(); 
private ArrayList<String> download = new ArrayList<String>(); 

public ArrayList<String> getName() { 
    return name; 
} 

public void setName(String name) { 
    this.name.add(name); 
} 

public ArrayList<String> getImgurl(){ 
    return imgurl; 
} 

public void setImgurl(String imgurl){ 
    this.imgurl.add(imgurl); 
} 

public ArrayList<String> getDate() { 
    return date; 
} 

public void setDate(String date) { 
    this.date.add(date); 
} 

public ArrayList<String> getPrice() { 
    return price; 
} 

public void setPrice(String price) { 
    this.price.add(price); 
} 

public ArrayList<String> getDescription() { 
    return description; 
} 

public void setDescription(String description) { 
    this.description.add(description); 
} 

public ArrayList<String> getDownload() { 
    return download; 
} 

public void setDownload(String download) { 
    this.download.add(download); 
} 
} 

現在的問題是...如何使它顯示在主活動?

public void onCreate(Bundle savedInstanceState) { 
    MagazineList magazineList = null; 
private List<MagazineList> magazines = null; 



    LinearLayout layout = new LinearLayout(this); 
    layout.setOrientation(1); 


    TextView name[]; 
    TextView imgurl[]; 
    TextView date[]; 
    TextView description[]; 
    TextView price[]; 
    TextView download[]; 

    AndroidSaxFeedParser saxparser = new AndroidSaxFeedParser(<my website>); 
    magazines = saxparser.parse(); 
    for(MagazineList magazineList : magazines){ 
     name = new TextView[magazineList.getName().size()]; 
     imgurl = new TextView[magazineList.getName().size()]; 
     date = new TextView[magazineList.getName().size()]; 
     description = new TextView[magazineList.getName().size()]; 
     price = new TextView[magazineList.getName().size()]; 
     download = new TextView[magazineList.getName().size()]; 


    (Supposingly I should get my data from here... What's next? Perhaps I have some syntax errors when declaring TextViews, I'm not sure. Please help out.) 
    } 

} 

回答

0

嗯,我不是Java專家,但我從來沒有見過像你在用這些TextView做什麼的東西。這是數組表示法。

試試這個(假設解析代碼工作正常)

等待,我被你在這裏做什麼用MagazineList類什麼COMPLETELY揭去。好吧,第一件事情,對於TextViews,你會想用這樣的:

name = new TextView(this); 
name.setText(/*your magazinelist getter for name*/); 
name.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT); 
layout.addView(name); 

難道這些進入名單?你最終和他們一起做什麼?如果您只是想確保內容得到解析,那麼運行調試器並在運行解析後檢查magazinelist對象。

就您的MagazineList類而言......也許我是誤解,但是您真的應該只有一個雜誌類,定義了一個雜誌及其名稱,日期等,然後您可以使用ArrayList<Magazine>創建雜誌列表。然後,您可以使用foreach循環遍歷它們,或將它們調整爲自定義ListView。

舉例雜誌類:

public class Magazine { 

private String name, imgurl, date, price, description, download; 

public String getName() { 
    return name; 
} 

public void setName(String name) { 
    this.name = name; 
} 

public String getImgurl(){ 
    return imgurl; 
} 

public void setImgurl(String imgurl){ 
    this.imgurl = imgurl; 
} 

public String getDate() { 
    return date; 
} 

public void setDate(String date) { 
    this.date = date; 
} 

public String getPrice() { 
    return price; 
} 

public void setPrice(String price) { 
    this.price = price; 
} 

public String getDescription() { 
    return description; 
} 

public void setDescription(String description) { 
    this.description = description; 
} 

public String getDownload() { 
    return download; 
} 

public void setDownload(String download) { 
    this.download = download; 
} 
} 

然後你只需要來擴展會拿在ArrayList中或雜誌[],並將其顯示成一個ListView的ArrayAdapter。