调用引发异常的方法

时间:2019-03-25 10:20:31

标签: java

我正在编写一个应用程序,以从原子供稿中提取和显示内容。适用于该方法的方法,但是当我尝试在Unhandled exception: java.lang.Exception中调用方法“ showFeed()”时收到错误“ onNavigationItemSelected”。

package com.myapp;
import java.net.URL;
import java.util.Iterator;
import com.sun.syndication.feed.synd.SyndEntry;
import com.sun.syndication.feed.synd.SyndFeed;
import com.sun.syndication.io.SyndFeedInput;
import com.sun.syndication.io.XmlReader;

// ... 

public boolean onNavigationItemSelected(@NonNull MenuItem item) {
    switch (item.getItemId()) {
        case R.id.navigation_home:
            showFeed();
    }
}

// ...

public void showFeed() throws Exception {

    URL url = new URL("http://feeds.feedburner.com/javatipsfeed");
    XmlReader xmlReader = null;

    try {

        xmlReader = new XmlReader(url);
        SyndFeed feeder = new SyndFeedInput().build(xmlReader);
        System.out.println("Title Value " + feeder.getAuthor());

        for (Iterator iterator = feeder.getEntries().iterator(); iterator.hasNext();) {
            SyndEntry syndEntry = (SyndEntry) iterator.next();
            System.out.println(syndEntry.getTitle());
        }
    } finally {
        if (xmlReader != null)
            xmlReader.close();
    }

}

我想在onNavigationItemSelected中调用此方法。

2 个答案:

答案 0 :(得分:1)

您的showFeed方法抛出异常,

public void showFeed() throws Exception

必须使用try-catch块将其捕获,或者从onNavigationItemSelected的调用方方法中抛出该错误

所以要么抓住它,

 case R.id.navigation_home:
try{
            showFeed();
} catch (Exception e) {
e.printStackTrace();
}

或再次像下面一样扔它,

public boolean onNavigationItemSelected(@NonNull MenuItem item) throws Exception

答案 1 :(得分:0)

您正在UI线程上运行与网络相关的线程,这可能会导致ANR(活动不响应)。请遵循以下教程。

Android AsyncTask example and explanation