Java 调用引发异常的方法

Java 调用引发异常的方法,java,Java,我正在编写一个应用程序来从atom提要中提取和显示内容。该方法是有效的,但当我尝试调用onNavigationItemSelected中的方法“showFeed()”时,会出现错误“Unhandled exception:java.lang.exception” package com.myapp; import java.net.URL; import java.util.Iterator; import com.sun.syndication.feed.synd.SyndEntry; imp

我正在编写一个应用程序来从atom提要中提取和显示内容。该方法是有效的,但当我尝试调用
onNavigationItemSelected
中的方法“
showFeed()
”时,会出现错误“
Unhandled exception:java.lang.exception

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

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

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

}

您的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

例外情况是什么?我猜可能是I/O异常—尝试在单独的线程中写入,或使用异步任务—使用
try catch
或将
抛出异常
添加到方法中。检查异常。这消除了错误。谢谢我将此标记为答案,因为它显示了一个示例