加载rss新闻时黑屏

时间:2011-07-07 14:24:51

标签: android

我试图加载来自blogspot的一些rss新闻.Rss有点不同。这是它的形式

<feed>
<entry>

<id>tag:blogger.com,1999:blog-7518961852167560062.post-4523318015704090243</id>
<published>2011-07-07T15:08:00.003+03:00</published>
<updated>2011-07-07T15:11:04.213+03:00</updated>
<category scheme='http://www.blogger.com/atom/ns#' term='Karaoke Night'/>
<category scheme='http://www.blogger.com/atom/ns#' term='Deutsche Ecke'/>
<category scheme='http://www.blogger.com/atom/ns#' term='Johnny Vavouras'/>
<category scheme='http://www.blogger.com/atom/ns#' term='BOIKOS SA'/>
<title type='text'>Karaoke Night</title>
<summary type='text'>Be The Star Part 2 Την πρώτη φορά έγινε χαμός! Όλες και όλοι θέλατε να πιείτε την μπύρα σας και να πείτε και ένα τραγουδάκι. Το ένα έγιναν δύο, τα δύο τρία και τα τρία τέσσερα κοκ. Και όταν παίρνω φόρα τίποτα δεν με σταματά ήσασταν! Και αφού περάσαμε καλά και ρωτήσατε πότε θα ξαναγίνει βραδιά Karaoke, ορίστε η απάντηση:Ο Johnny Vavouras και η Μαρία Γκαγκώση θα είναι πάλι κοντά μας με τεράστια </summary>
<link rel='replies' type='application/atom+xml' href='http://deutscheecke-gr.blogspot.com/feeds/4523318015704090243/comments/default' title='Σχόλια ανάρτησης'/>
<link rel='replies' type='text/html' href='http://deutscheecke-gr.blogspot.com/2011/07/karaoke-night.html#comment-form' title='0 σχόλια'/>
<link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7518961852167560062/posts/default/4523318015704090243'/>
<link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7518961852167560062/posts/default/4523318015704090243'/>
<link rel='alternate' type='text/html' href='http://deutscheecke-gr.blogspot.com/2011/07/karaoke-night.html' title='Karaoke Night'/>
<author>
<name>ranic19</name>
<uri>http://www.blogger.com/profile/18311687460079471825</uri>
<email>ranic19@gmail.com</email>
<gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='04547458941145961505'/>
</author>
<media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-A0grH2ckHtA/ThLlFH1vUdI/AAAAAAAAAPw/uuo4hhJDygo/s72-c/DEUTSCHE+ECKE+14-7.jpg' height='72' width='72'/>
<thr:total>0</thr:total>

</entry>

</feed>

所以我试图改变通常的方式来获取rss ....我的新baseFeedParser类是这样的:

static String feedUrlString = "http://deutscheecke-gr.blogspot.com/feeds/posts/default";


    static final String ATOM_NAMESPACE = "http://www.w3.org/2005/Atom";
    static final String FEED = "feed";
    static final String ENTRY = "entry";

    static final String PUBLISHED = "publised";
    static final String SUMMARY = "summary";
    static final String LINK = "link";
    static final String HREF = "href";

    static final String TITLE = "title";

    private final URL feedUrl;

    protected BaseFeedParser(){
        try {
            this.feedUrl = new URL(feedUrlString);
        } catch (MalformedURLException e) {
            throw new RuntimeException(e);
        }
    }

    protected InputStream getInputStream() {
        try {
            return feedUrl.openConnection().getInputStream();
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }

    public List<Message> parse() {
        final Message currentMessage = new Message();
        RootElement root = new RootElement(ATOM_NAMESPACE,FEED);
        final List<Message> messages = new ArrayList<Message>();
        Element item= root.getChild(ENTRY);


        item.getChild(PUBLISHED).setEndTextElementListener(new EndTextElementListener(){
            public void end(String body) {
                currentMessage.setDate(body);
            }
        });
        item.getChild(SUMMARY).setEndTextElementListener(new EndTextElementListener(){
            public void end(String body) {
                currentMessage.setDescription(body);
            }
        });

    //  Element itemlist2 = root.getChild(ATOM_NAMESPACE,LINK);
    //  Element item2 = itemlist2.getChild(ATOM_NAMESPACE,HREF);
    //  item2.setEndElementListener(new EndElementListener(){
    //      public void end() {
    //          messages.add(currentMessage.copy());
    //      }
    //  });
        item.getChild(LINK).setEndTextElementListener(new EndTextElementListener(){
            public void end(String body) {
                currentMessage.setLink(HREF);
            }
        });
        item.getChild(TITLE).setEndTextElementListener(new EndTextElementListener(){
            public void end(String body) {
                currentMessage.setTitle(body);
            }
        });
        try {
            Xml.parse(this.getInputStream(), Xml.Encoding.UTF_8, root.getContentHandler());
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
        return messages;
    }
}

现在,在我的主要课程中,我试图像那样加载rss的标题

public class events extends ListActivity {

    private List<Message> messages;

    @Override
    public void onCreate(Bundle icicle) {
        super.onCreate(icicle);
        setContentView(R.layout.events);
        loadFeed();
    }

    private void loadFeed(){
        try{
            BaseFeedParser parser = new BaseFeedParser();
            messages = parser.parse();
            List<String> titles = new ArrayList<String>(messages.size());
            for (Message msg : messages){

                titles.add(msg.getTitle());
            }
            ArrayAdapter<String> adapter = 
                new ArrayAdapter<String>(this, R.layout.rowevents,titles);
            this.setListAdapter(adapter);
        } catch (Throwable t){
            Log.e("Deutsche Ecke News",t.getMessage(),t);
        }
    }

最后,当我运行我的应用程序时,我没有错误,但唯一的想法是我看到的是黑屏...所以我认为我的错误在我的代码中......我可以请一些帮助吗?有些不对劲?这里感谢!!:)

1 个答案:

答案 0 :(得分:0)

您的loadFeed方法正在主UI线程上运行,因此阻止了UI更新。尝试在单独的线程上运行loadFeed。您可能希望为此目的使用AsyncTask或Handler。