Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.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中的XML解析:获取异常_Android_Xml_Parsing_Url_Using - Fatal编程技术网

Android中的XML解析:获取异常

Android中的XML解析:获取异常,android,xml,parsing,url,using,Android,Xml,Parsing,Url,Using,对于这个给定的代码,我得到了一个异常。我不知道如何澄清这一点 package com.new_xml_parse; import java.net.URL; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node

对于这个给定的代码,我得到了一个异常。我不知道如何澄清这一点

package com.new_xml_parse;
import java.net.URL;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.InputSource;
import android.app.Activity;
import android.os.Bundle;
import android.widget.LinearLayout;
import android.widget.TextView;
public class New_xml_parseActivity extends Activity 
{
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
/** Create a new layout to display the view */
LinearLayout layout = new LinearLayout(this);
layout.setOrientation(1);
/** Create a new textview array to display the results */
TextView name[];
TextView website[];
TextView category[];
try
{
URL url = new URL("http://bestpropertyworld.com/MobileApp/xml1.xml");
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
Document doc = db.parse(new InputSource(url.openStream()));
doc.getDocumentElement().normalize();
NodeList nodeList = doc.getElementsByTagName("item");
/** Assign textview array lenght by arraylist size */
name = new TextView[nodeList.getLength()];
website = new TextView[nodeList.getLength()];
category = new TextView[nodeList.getLength()];
for (int i = 0; i < nodeList.getLength(); i++)
{
Node node = nodeList.item(i);
name[i] = new TextView(this);
website[i] = new TextView(this);
category[i] = new TextView(this);
Element fstElmnt = (Element) node;
NodeList nameList = fstElmnt.getElementsByTagName("name");
Element nameElement = (Element) nameList.item(0);
nameList = nameElement.getChildNodes();
name[i].setText("Name = "+ ((Node) nameList.item(0)).getNodeValue());
NodeList websiteList = fstElmnt.getElementsByTagName("website");
Element websiteElement = (Element) websiteList.item(0);
websiteList = websiteElement.getChildNodes();
website[i].setText("Website = "+ ((Node) websiteList.item(0)).getNodeValue());
category[i].setText("Website Category = "+ websiteElement.getAttribute("category"));
layout.addView(name[i]);
layout.addView(website[i]);
layout.addView(category[i]);
}
} 
catch (Exception e)
{
System.out.println("XML Pasing Excpetion = " + e);
}
/** Set the layout view to display */
setContentView(layout);
}
}

您的错误是
networkonmainthreadeception
,这意味着您正在主线程(UI线程)上获取和解析XML,这会使其无响应。请参阅以了解如何在后台使用
AsyncTask
执行长时间任务,并在完成时填充UI。

它报告您应该将网络功能设置为后台,因为在Android中为此类任务阻止UI线程不是一个好主意

new FetchXMLAsyncTask.execute();

private class FetchXMLAsyncTask extends AsyncTask<Void, Void, Void> {
        protected void onPreExecute() {
          } 
          @Override
          protected Void doInBackground(Void... arg0) {
               // put your code here where you should fetch xml, parse it and call update ui components.
               return null;
          }

         @Override
         protected void onPostExecute(final Void unused) {

         }   
      }
  }
新建FetchXMLAsyncTask.execute();
私有类FetchXMLAsyncTask扩展了AsyncTask{
受保护的void onPreExecute(){
} 
@凌驾
受保护的Void doInBackground(Void…arg0){
//将代码放在应该获取xml、解析xml并调用更新ui组件的位置。
返回null;
}
@凌驾
后期执行时受保护的无效(最终无效未使用){
}   
}
}

您的主线程无法处理XML解析。因此,请使用。来完成XML解析


您所收到的错误似乎是由于在main()线程上执行的服务器活动造成的。为了避免这种情况,您必须使用AsyncTask,如下所示

将这一行代码粘贴到下面的oncreate()或onclicklistener中,或放置XMLPARSING代码的任何位置

new DoXMLParsing().execute(); 
下面给出的DoXMLParsing是一个内部类,它扩展了AsyncTask以执行后台操作并在UI线程上发布结果,而无需操作线程和/或处理程序。 只需将下面的类复制并粘贴到活动类中,您就可以从中执行XMLPARSING

public class DoXMLParsing extends AsyncTask<Void, Void, Void> {


 protected void onPreExecute() {   
    //any task if you would like to perform before exe the XMLPARSING place the code here
   }


   @Override
   protected Void doInBackground(Void... params) {

       //cut and paste your whole XMLPARSING code here..

       return null;
      }

 protected void onPostExecute(Void result) {

     // Here if you wish to do future process for ex. move to another activity do here

     }
 }
public类DoXMLParsing扩展了异步任务{
受保护的void onPreExecute(){
//如果要在XMLPARSING之前执行任何任务,请将代码放在此处
}
@凌驾
受保护的Void doInBackground(Void…参数){
//在此处剪切并粘贴整个XMLPARSING代码。。
返回null;
}
受保护的void onPostExecute(void结果){
//如果您希望在此处执行ex的未来流程,请转到其他活动,请在此处执行
}
}

希望这有帮助!!:)

很明显,我无法得到这个。。你能详细告诉我电话号码吗。。从这件事我得到的是。。我必须使用异步任务。。但是我不知道怎么去哪里。。我应该创建一个新类吗??请帮我一把。。谢谢你之前的一个..怎么做。。我是否可以创建内部类r wat i do..在doInBackground方法中,我不知道我必须在UI中放置哪些代码..我做什么。。因为我对安卓系统还不熟悉。。我没法把你弄清楚。。你能详细告诉我电话号码吗。。从这件事我得到的是。。我必须使用异步任务。。但是我不知道怎么去哪里。。我应该创建一个新类吗??请帮我一把。。谢谢你之前的一封信。。但是我不知道在哪里使用异步任务,因为我需要android。。无法清楚地了解你。。电话很清楚。。我现在能做什么?这太宽松了。。能给我相同plz的简单代码吗。。我很难理解。。再次感谢..签入
NewsMainActivity.java
Newsparser.java
就是这两个就足够从URL网站中的XML文件中获取数据了,您可以在动态数组中获取数据
public class DoXMLParsing extends AsyncTask<Void, Void, Void> {


 protected void onPreExecute() {   
    //any task if you would like to perform before exe the XMLPARSING place the code here
   }


   @Override
   protected Void doInBackground(Void... params) {

       //cut and paste your whole XMLPARSING code here..

       return null;
      }

 protected void onPostExecute(Void result) {

     // Here if you wish to do future process for ex. move to another activity do here

     }
 }