Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/201.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_Android Asynctask - Fatal编程技术网

在Android应用程序中解析XML文件

在Android应用程序中解析XML文件,android,android-asynctask,Android,Android Asynctask,我正在创建一个Android应用程序。在这里,我通过解析存储在手机中的XML文件来显示结果。但是解析XMl文件需要一分钟以上的时间 因此,我已经实现了AsyncTask功能,但仍然需要一分钟以上的时间 如果我作为Java应用程序运行来解析XML,同样的代码需要3-5秒来解析完整的XML并打印数据 解析代码 public class ParseMyTripResponseXML { String aprovedStatus=""; SetFlightRecordsData objF

我正在创建一个Android应用程序。在这里,我通过解析存储在手机中的XML文件来显示结果。但是解析XMl文件需要一分钟以上的时间

因此,我已经实现了AsyncTask功能,但仍然需要一分钟以上的时间

如果我作为Java应用程序运行来解析XML,同样的代码需要3-5秒来解析完整的XML并打印数据

解析代码

public class ParseMyTripResponseXML {
    String aprovedStatus="";
    SetFlightRecordsData objFlight;
    public MyTripRespone parseMyTripXML(File filename) {
        MyTripRespone respObj = new MyTripRespone();

        DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
        DocumentBuilder dBuilder = null;

        CorporateBookingApprovals corpApprovalObj = null;
        List<CorporateBookingApprovals> corpApprovalList = new ArrayList<CorporateBookingApprovals>();

        try {
            dBuilder = dbFactory.newDocumentBuilder();
        }
        catch (ParserConfigurationException e) {
            e.printStackTrace();
        }
        Document doc = null;
        try {
            doc = dBuilder.parse(filename);
        }
        catch (SAXException e) {
            Log.d("SAXException", e.getMessage()+"");
        }
        catch (IOException e) {
            Log.d("IOException", e.getMessage()+"");
        }

        doc.getDocumentElement().normalize();
        Node rootNode = doc.getElementsByTagName("Root").item(0);
        Element rootElement = (Element) rootNode;
        String status = getTagValue("StatusCode", rootElement);
        if (status.equals("200")) {
            NodeList corpList = ((Element) doc.getElementsByTagName("Result").item(0)).getElementsByTagName("CorporateBookingApprovals");
            for (int i = 0; i < corpList.getLength(); i++) {
                try {
                    Node corporateDetailsNode = corpList.item(i);
                    Element corporateDetailsElement = (Element) corporateDetailsNode;
                    corpApprovalObj = new CorporateBookingApprovals();
                    corpApprovalObj.setApprovalId(getTagValue("ApprovalId", corporateDetailsElement));
                    corpApprovalObj.setAgentId(getTagValue("AgentId", corporateDetailsElement));
                    String statusApproval  = getTagValue("ApprovalStatus", corporateDetailsElement);
                    if(statusApproval.equals("approved")){
                        aprovedStatus = "A";
                    }else if (statusApproval.equals("pending")) {
                        aprovedStatus = "P";
                    }
                    else if (statusApproval.equals("inqueue")) {
                        aprovedStatus = "Q";
                    }
                    else if (statusApproval.equals("rejected")) {
                        aprovedStatus = "R";
                    }
                    corpApprovalObj.setApprovalStatus(aprovedStatus);
                    corpApprovalObj.setInsertTime(getTagValue("InsertTime", corporateDetailsElement));
                    objFlight = new SetFlightRecordsData();
                    objFlight.setFlightData(doc, corpApprovalObj);
                    corpApprovalList.add(corpApprovalObj);
                }
                catch (Exception e) {
                    Log.d("exception in main", e.getMessage()+"");
                    continue;
                }
            }
            respObj.setCoroprateBookingDetails(corpApprovalList);
        }

        return respObj;
    }

    public static String getTagValue(String sTag, Element eElement) {
        NodeList nlList = eElement.getElementsByTagName(sTag).item(0)
                .getChildNodes();
        Node nValue = (Node) nlList.item(0);
        if (nValue == null) {

            return "";
        }
        else {
            return nValue.getNodeValue();
        }
    }
公共类ParseMyTripResponseXML{
字符串aprovedStatus=“”;
设置飞行记录数据objFlight;
公共MyTripRespone parseMyTripXML(文件名){
MyTripRespone respObj=新的MyTripRespone();
DocumentBuilderFactory dbFactory=DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder=null;
CorporateBookingApprovalobj=null;
List corpaprovallist=new ArrayList();
试一试{
dBuilder=dbFactory.newDocumentBuilder();
}
捕获(ParserConfiguration异常e){
e、 printStackTrace();
}
单据单据=空;
试一试{
doc=dBuilder.parse(文件名);
}
捕获(SAXE异常){
Log.d(“SAXException”,e.getMessage()+”);
}
捕获(IOE异常){
Log.d(“IOException”,例如getMessage()+);
}
doc.getDocumentElement().normalize();
Node rootNode=doc.getElementsByTagName(“根”)。项(0);
元素rootElement=(元素)rootNode;
String status=getTagValue(“StatusCode”,rootElement);
如果(状态等于(“200”)){
NodeList corpList=((元素)doc.getElementsByTagName(“结果”).item(0)).getElementsByTagName(“公司图书批准”);
对于(int i=0;i
我如何使它更快


我使用的是DOM解析器。

我建议通过添加计时器函数和消除过程,注释掉部分并重新运行,从而准确地知道是什么导致了您的速度减慢。通常的怀疑是对象创建调用和字符串处理

long startTime;
long endTime;

startTime = android.os.SystemClock.uptimeMillis();

// parse routine here

endTime = android.os.SystemClock.uptimeMillis();

Log.d("xmlparse", "Excution time: "+(endTime-startTime)+" ms");

发布您的代码以解析XML。您是否也在其他一些设备中检查了相同的过程。因为这也取决于设备的功能。@LawrenceChoy更新了我的代码XML文件有多大?请记住,尽管移动设备在RAM大小和CPU速度方面都越来越接近台式计算机,但它们仍然非常复杂低。我不是专家,但是如果文件足够大,Android就不能把它全部装入内存(但是桌面计算机会)。如果是这样,那么顺序文件IO操作会影响你的性能。总之,除了代码优化之外,还有很多其他因素需要考虑(这也是重要的)。@Losiowaty文件大小为1.06MB