RSSService项具有多次相同的键

时间:2017-11-12 10:48:56

标签: codenameone

我有一个RSSService,其中的项目如下所示

<item>
        <title>Accessori per la cura della persona</title>
        <link>http://www.myurl.it/accessori-per-la-cura-della-persona/</link>
        <comments>http://www.myurl.it/accessori-per-la-cura-della-persona/#comments</comments>
        <pubDate>Tue, 24 Oct 2017 09:29:44 +0000</pubDate>
        <dc:creator><![CDATA[Farmacia Rizzo Davide]]></dc:creator>
                <category><![CDATA[News]]></category>
        <category><![CDATA[Offerte]]></category>
        <category><![CDATA[Callifugo]]></category>
        <category><![CDATA[Raspa piedi]]></category>
        <category><![CDATA[Spazzola ceramica]]></category>
        <category><![CDATA[Spazzola piatta]]></category>
        <category><![CDATA[Spazzola tonda]]></category>
        <category><![CDATA[Spazzole capelli]]></category>

        <guid isPermaLink="false">http://www.myurl.it/?p=3982</guid>
        <description>.....

要阅读我使用的所有内容:

List<Map> records;
...
records = rss.getResults();
...
for (Map m : records) {                    
                Button b = new Button((String)m.get("title"));
                if(((String)m.get("category")).equals(CATEGORY_OFFERTE)){
                    b.setIcon(iconStar);
                } else {
                    b.setIcon(iconNews);
                }                
                b.addActionListener((l)->{
                    Boolean can = Display.getInstance().canExecute((String)m.get("link"));
                    if(can != null && can) {
                      Display.getInstance().execute((String)m.get("link"));
                    } else {
                      ToastBar.Status status = ToastBar.getInstance().createStatus();
                      status.setMessage("Non riesco a connettermi");
                      status.setExpires(3000);
                      status.show();
                    }
                });
                recordsContainer.addComponent(b);
            }

当我读到键&#34;类别&#34;我总是得到最后一个条目(在这个项目&#34; Spazzole capelli&#34;)。 有一种方法可以读取像数组一样的键吗?这样的事情:

String[] mc = (String[]) m.get("category");

提前感谢您的帮助。 的Davide。

2 个答案:

答案 0 :(得分:0)

这看起来像RSSService中缺少的一个功能,它只能找到一个类别条目,因此它将其解析为一个哈希映射,实际上只允许一个这样的条目。

我建议您实现自己的RSS阅读并直接转到XML以获得协议的全部功能。您可以使用现有类作为如何进行RSS / ATOM解析的参考。

答案 1 :(得分:0)

这是我的想法

protected void textElement(String text) {
                if(lastTag != null && current != null) {
                    // make "ATOM" seem like RSS
                    if("summary".equals(lastTag)) {
                        current.put("details", text);
                    } else {
                        if("content".equals(lastTag)) {
                            current.put("description", text);
                        } else {
                            if(current.get(lastTag) != null){
                                try {
                                    List list = (List) current.get(lastTag);
                                    list.add(text);
                                    current.put(lastTag, list);                                    
                                } catch (ClassCastException e){ // java.lang.String cannot be cast to java.util.List
                                    List list = new ArrayList();
                                    list.add((String)current.get(lastTag));
                                    list.add(text);
                                    current.put(lastTag, list);                                    
                                }
                            } else {
                                current.put(lastTag, text);
                            }                            
                        }
                    }
                }
            }

在我的表格中使用如下:

for (Map m : records) {
                Button b = new Button((String)m.get("title"));
                try{
                    String category = (String)m.get("category");
                    if(category.equals(CATEGORY_OFFERTE)){
                        b.setIcon(iconStar);
                    } else {
                        b.setIcon(iconNews);
                    }                    
                } catch (ClassCastException e){ // java.lang.String cannot be cast to java.util.List
                    b.setIcon(iconNews);
                    List list = (List) m.get("category");
                    for(int i=0; i < list.size(); i++){
                        if(((String)list.get(i)).equals(CATEGORY_OFFERTE)){
                            b.setIcon(iconStar);
                        }                        
                    }
                }
                b.addActionListener((l)->{
                    Boolean can = Display.getInstance().canExecute((String)m.get("link"));
                    if(can != null && can) {
                      Display.getInstance().execute((String)m.get("link"));
                    } else {
                      ToastBar.Status status = ToastBar.getInstance().createStatus();
                      status.setMessage("Non riesco a connettermi");
                      status.setExpires(3000);
                      status.show();
                    }
                });
                recordsContainer.addComponent(b);
            }