Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/208.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java DOM4j不';我不能在安卓上工作_Java_Android_Xml_Rss_Dom4j - Fatal编程技术网

Java DOM4j不';我不能在安卓上工作

Java DOM4j不';我不能在安卓上工作,java,android,xml,rss,dom4j,Java,Android,Xml,Rss,Dom4j,我尝试使用DOM4j在Android上分阶段创建一个xmlrss提要。我确实将dom4j.jar添加到lib\和用户权限 <uses-permission android:name="android.permission.INTERNET"/> 以下是主活动中的onCreate函数: @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceS

我尝试使用DOM4j在Android上分阶段创建一个xmlrss提要。我确实将dom4j.jar添加到lib\和用户权限

<uses-permission android:name="android.permission.INTERNET"/>
以下是主活动中的onCreate函数:

    @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_rssdom4j_main);

    try {
        URL url = new URL("http://tw.news.yahoo.com/rss/");
        SAXReader saxReader = new SAXReader();
        //?
        Document document = saxReader.read(url);
        Element channel = (Element) document.getRootElement().element(
                "channel");
        for (Iterator i = channel.elementIterator("item"); i.hasNext();) {
            Element element = (Element) i.next();
            System.out.println("title: " + element.elementText("title"));

            String descrip_original = element.elementText("description");
            if (descrip_original.startsWith("<p>")) {
                // address html-like layout
                System.out.println(descrip_original.substring(
                        descrip_original.indexOf("</a>") + 4,
                        descrip_original.length() - 1));

            }

            System.out.println("link: " + element.elementText("link"));
            System.out
                    .println("pubDate: " + element.elementText("pubDate"));

            System.out.println();
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
}

您正在通过主UI线程访问internet。这是安卓4.0.x以来的禁忌。将访问网络的代码放在AsyncTask中,或为其启动一个新线程

new Thread( new Runnable() {
    @Override
    public void run() {
        try {
            URL url = new URL("http://tw.news.yahoo.com/rss/");
            SAXReader saxReader = new SAXReader();

            Document document = saxReader.read(url);
            Element channel = (Element) document.getRootElement().element(
                    "channel");
            for (Iterator i = channel.elementIterator("item"); i.hasNext();) {
                Element element = (Element) i.next();
                System.out.println("title: " + element.elementText("title"));

                String descrip_original = element.elementText("description");
                if (descrip_original.startsWith("<p>")) {
                    // address html-like layout
                    System.out.println(descrip_original.substring(
                            descrip_original.indexOf("</a>") + 4,
                            descrip_original.length() - 1));

                }

                System.out.println("link: " + element.elementText("link"));
                System.out
                        .println("pubDate: " + element.elementText("pubDate"));

                System.out.println();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
} ).start();
new线程(new Runnable()){
@凌驾
公开募捐{
试一试{
URL=新URL(“http://tw.news.yahoo.com/rss/");
SAXReader SAXReader=新SAXReader();
documentdocument=saxReader.read(url);
元素通道=(元素)document.getRootElement().Element(
“渠道”);
for(迭代器i=channel.elementIterator(“项”);i.hasNext();){
Element=(Element)i.next();
System.out.println(“标题:”+element.elementText(“标题”);
字符串descripp_original=element.elementText(“描述”);
如果(用(“”)描述原始启动){
//解决类似html的布局问题
System.out.println(descripp_original.substring(
描述原始索引(“”+4,
描述原始长度()-1);
}
System.out.println(“链接:+element.elementText(“链接”);
系统输出
.println(“pubDate:+element.elementText”(“pubDate”);
System.out.println();
}
}捕获(例外e){
e、 printStackTrace();
}
}
}).start();

非常感谢,它很有效:)我还有一个问题。为什么我不能在另一个.java类中编写phasher,并在线程中调用RSSPhasher.parse()之类的方法呢?只要在主UI线程之外调用任何网络操作,就可以了。在SAX解析器解析输入流时,您需要小心使用它们。如果查询返回一个大数据集,
read()
方法可能会返回,但随后的解析可能会再次访问网络。DOM解析器不会有这个问题,因为它们只需一次读取/构建,但当然,您对内存的要求更高。
SAXReader saxReader = new SAXReader();
new Thread( new Runnable() {
    @Override
    public void run() {
        try {
            URL url = new URL("http://tw.news.yahoo.com/rss/");
            SAXReader saxReader = new SAXReader();

            Document document = saxReader.read(url);
            Element channel = (Element) document.getRootElement().element(
                    "channel");
            for (Iterator i = channel.elementIterator("item"); i.hasNext();) {
                Element element = (Element) i.next();
                System.out.println("title: " + element.elementText("title"));

                String descrip_original = element.elementText("description");
                if (descrip_original.startsWith("<p>")) {
                    // address html-like layout
                    System.out.println(descrip_original.substring(
                            descrip_original.indexOf("</a>") + 4,
                            descrip_original.length() - 1));

                }

                System.out.println("link: " + element.elementText("link"));
                System.out
                        .println("pubDate: " + element.elementText("pubDate"));

                System.out.println();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
} ).start();