Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.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
Android下用JDOM2解析XML文件_Android_Xml_Parsing_Jdom_Jdom 2 - Fatal编程技术网

Android下用JDOM2解析XML文件

Android下用JDOM2解析XML文件,android,xml,parsing,jdom,jdom-2,Android,Xml,Parsing,Jdom,Jdom 2,我在Android应用程序中使用库JDOM2(确切地说是2.0.5)解析XML文件时遇到了一个问题 在Java项目中,它可以正常工作,但在Android应用程序项目中,我收到以下消息:“无法打开” 这是我的XMLReader类: package fr.jcdc.exemple.jdom; import java.io.IOException; import java.util.List; import org.jdom2.Document; import org.jdom2.Element;

我在Android应用程序中使用库JDOM2(确切地说是2.0.5)解析XML文件时遇到了一个问题

在Java项目中,它可以正常工作,但在Android应用程序项目中,我收到以下消息:“无法打开”

这是我的XMLReader类:

package fr.jcdc.exemple.jdom;

import java.io.IOException;
import java.util.List;

import org.jdom2.Document;
import org.jdom2.Element;
import org.jdom2.JDOMException;
import org.jdom2.input.SAXBuilder;

import android.util.Log;

public class XMLReader {

    public XMLReader() {
        super();
    }

    public void loading() {

        try {

            SAXBuilder builder = new SAXBuilder();

            Document document = (Document) builder.build("http://jeancdc.perso.sfr.fr/fichierXML.xml");

            Element rootNode = document.getRootElement();
            List<Element> charactersList = rootNode.getChildren("personnage");

            for (int i = 0; i < charactersList.size(); i++) {

               Element node = (Element) charactersList.get(i);

               Log.d("tag", node.getChildText("prenom") + " " + node.getChildText("nom"));      
            }

        }
        catch (IOException ioex) {
            Log.d("ioex", ioex.getMessage());
        }
        catch (JDOMException jdomex) {
            Log.d("jdomex", jdomex.getMessage());
        }   
    }
}
这是我在日志中获得的异常跟踪的一部分:

06-24 22:58:39.794: D/ioex(18560): Couldn't open http://jeancdc.perso.sfr.fr/fichierXML.xml
06-24 22:58:39.794: W/System.err(18560): java.io.IOException: Couldn't open http://jeancdc.perso.sfr.fr/fichierXML.xml
06-24 22:58:39.864: W/System.err(18560):    at org.apache.harmony.xml.ExpatParser.openUrl(ExpatParser.java:755)
06-24 22:58:39.864: W/System.err(18560):    at org.apache.harmony.xml.ExpatReader.parse(ExpatReader.java:292)
06-24 22:58:39.864: W/System.err(18560):    at org.jdom2.input.sax.SAXBuilderEngine.build(SAXBuilderEngine.java:217)
06-24 22:58:39.864: W/System.err(18560):    at org.jdom2.input.sax.SAXBuilderEngine.build(SAXBuilderEngine.java:277)
06-24 22:58:39.864: W/System.err(18560):    at org.jdom2.input.SAXBuilder.build(SAXBuilder.java:1141)
.....
06-24 22:58:39.864: W/System.err(18560): Caused by: android.os.NetworkOnMainThreadException
06-24 22:58:39.872: W/System.err(18560):    at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1117)
06-24 22:58:39.872: W/System.err(18560):    at java.net.InetAddress.lookupHostByName(InetAddress.java:385)
06-24 22:58:39.872: W/System.err(18560):    at java.net.InetAddress.getAllByNameImpl(InetAddress.java:236)
06-24 22:58:39.880: W/System.err(18560):    ... 20 more

尝试传递URL,而不是传递字符串

java.net.URL temp;
try {
     temp = new java.net.URL("http://jeancdc.perso.sfr.fr/fichierXML.xml");
} catch (java.net.MalformedURLException e) {
     temp = null;
}
Document document = (Document) builder.build(temp);

尝试传递URL,而不是传递字符串

java.net.URL temp;
try {
     temp = new java.net.URL("http://jeancdc.perso.sfr.fr/fichierXML.xml");
} catch (java.net.MalformedURLException e) {
     temp = null;
}
Document document = (Document) builder.build(temp);

最后的评论很有帮助。查看谷歌搜索结果


不再允许您从应用程序中的主线程访问网络。创建一个带有回调的子线程,以加载XML最后一条注释。查看谷歌搜索结果


不再允许您从应用程序中的主线程访问网络。使用回调创建子线程以加载XML

应用程序是否具有网络权限?我已在AndroidManifest.XML中添加了这一行:我是否需要添加其他权限?如何提供有关错误消息的更多详细信息。有什么原因吗?这个日志文件会有帮助吗?您的应用程序是否具有网络权限?我已在AndroidManifest.xml中添加了这一行:是否需要添加其他权限?如何提供有关错误消息的更多详细信息。有什么原因吗?这个日志文件会有帮助吗?已经尝试过了,但不幸的是,它无法解决问题。我加入了上面的一个日志文件。已经尝试过了,不幸的是,它没有解决问题。我加入了上面的一个日志文件。OK,为了验证,我通过更改AndroidManifest.xml中的以下行将目标更改为版本9:android:targetSdkVersion=“9”,它可以工作。所以现在,我必须实现另一个线程,以便与更高的API兼容。谢谢好的,为了验证,我通过更改AndroidManifest.xml中的以下行将目标更改为版本9:android:targetSdkVersion=“9”,它可以工作。所以现在,我必须实现另一个线程,以便与更高的API兼容。谢谢