private class ParseXML extends AsyncTask<Integer, Integer, Document>{
public void onPostExecute(Document d) {
ParseDocument(d); }
@Override
protected Document doInBackground(Integer... params) {
// TODO Auto-generated method stub
DocumentBuilderFactory dbf= DocumentBuilderFactory.newInstance();
try {
//Uri uri = Uri.parse("android.resource://com.example.xml_parser/raw/options");
InputStream is=getResources().openRawResource(R.raw.options);
DocumentBuilder db = dbf.newDocumentBuilder();
dom=db.parse(is);
Log.i(TAG,"parsing done");
}
catch(ParserConfigurationException pce){
pce.printStackTrace();
}
catch(SAXException se){
se.printStackTrace();
}
catch(IOException ioe){
ioe.printStackTrace();
}
return dom;
}
答案 0 :(得分:2)
错误是,您正在尝试解析主UI线程中的XML。这意味着您限制用户使用UI执行操作。在Andorid中需要注意的是,每当应用程序在5秒钟内没有响应时,您将被使用Applicaation Not Responding Dialog。
所以你需要做的是,使用AsyncTask解析你的XML,然后从中更新你的Ui。
这是一个例子,
https://stackoverflow.com/a/5806402/603744
AsyncTask包含三种方法,即
第二种和第三种方法与UI相关,您可以在此处执行任何基于UI的操作,第一种方法是您的背景线程,您必须进行巨大的计算,因此不会影响您的用户界面。