2013-07-01 91 views
0

我已經把我的代碼吐出來,並找出了什麼方法似乎是造成這個問題,但我一直無法弄清楚爲什麼。根本沒有編譯錯誤,但程序似乎並沒有完成這個方法。XML分析器無法正常工作

在這一點之後,它會繼續工作,它只是完全跳過某一部分,並使某些變量爲空,導致它稍後在代碼中跳過動作。

我最終試圖從數據庫中拉出最後一項,比較數字並根據這兩組之間的差異進行計算。如果我的數據對象爲空,我將代碼設置爲不進行計算,並且由於此問題,我的數據對象始終爲空。

我已經在此代碼中的多個位置放了Toast通知,它似乎卡在while循環內的某處。

private Flows readFlows(XmlPullParser parser) throws XmlPullParserException, IOException 
     { 
      parser.require(XmlPullParser.START_TAG, null, "flows"); 

      //declare variables 
      String ReportDate = null; 
      String TimeMeterRead = null; 
      Integer Influent14 = null; 
      Integer Influent15 = null; 
      Double WaterTreated14 = null; 
      Double WaterTreated15 = null; 
      Double TotalWaterTreated = null; 
      Integer Softener1 = null; 
      Double WaterSoftened1 = null; 
      Integer Softener2 = null; 
      Double WaterSoftened2 = null; 
      Integer Softener3 = null; 
      Double WaterSoftened3 = null; 
      Integer Softener4 = null; 
      Double WaterSoftened4 = null; 
      Integer Softener5 = null; 
      Double WaterSoftened5 = null; 
      Integer WaterByPassed = null; 
      Double TotalByPassed = null; 
      Double SaltUsed = null; 
      Double SoftenerRegeneration = null; 
      Double RegenWaste = null; 
      Double Level = null; 
      Double PSI = null; 

      //read tag and open corresponding function 
      while(parser.next() != XmlPullParser.END_TAG) 
      { 
       if (parser.getEventType() != XmlPullParser.START_TAG) 
       { 
        continue; 
       } 
       String name = parser.getName(); 
       if (name.equals("ReportDate")) 
       { 
        ReportDate = readReportDate(parser); 
       } else if (name.equals("TimeMeterRead")) 
       { 
        TimeMeterRead = readTimeMeterRead(parser); 
       } else if (name.equals("ReportID")) 
       { 
        Influent14 = readInfluent14(parser); 
       } else if (name.equals("Influent14")) 
       { 
        Influent14 = readInfluent14(parser); 
       } else if (name.equals("Influent15")) 
       { 
        Influent15 = readInfluent15(parser); 
       } else if (name.equals("WaterTreated14")) 
       { 
        WaterTreated14 = readWaterTreated14(parser); 
       } else if (name.equals("WaterTreated15")) 
       { 
        WaterTreated15 = readWaterTreated15(parser); 
       } else if (name.equals("TotalWaterTreated")) 
       { 
        TotalWaterTreated = readTotalWaterTreated(parser); 
       } else if (name.equals("Softener1")) 
       { 
        Softener1 = readSoftener1(parser); 
       } else if (name.equals("WaterSoftened1")) 
       { 
        WaterSoftened1 = readWaterSoftened1(parser); 
       } else if (name.equals("Softener2")) 
       { 
        Softener2 = readSoftener2(parser); 
       } else if (name.equals("WaterSoftened2")) 
       { 
        WaterSoftened2 = readWaterSoftened2(parser); 
       } else if (name.equals("Softener3")) 
       { 
        Softener3 = readSoftener3(parser); 
       } else if (name.equals("WaterSoftened3")) 
       { 
        WaterSoftened3 = readWaterSoftened3(parser); 
       } else if (name.equals("Softener4")) 
       { 
        Softener4 = readSoftener4(parser); 
       } else if (name.equals("WaterSoftened4")) 
       { 
        WaterSoftened4 = readWaterSoftened4(parser); 
       } else if (name.equals("Softener5")) 
       { 
        Softener5 = readSoftener5(parser); 
       } else if (name.equals("WaterSoftened5")) 
       { 
        WaterSoftened5 = readWaterSoftened5(parser); 
       } else if (name.equals("WaterByPassed")) 
       { 
        WaterByPassed = readWaterByPassed(parser); 
       } else if (name.equals("TotalByPassed")) 
       { 
        TotalByPassed = readTotalByPassed(parser); 
       } else if (name.equals("SaltUsed")) 
       { 
        SaltUsed = readSaltUsed(parser); 
       } else if (name.equals("SoftenerRegeneration")) 
       { 
        SoftenerRegeneration = readSoftenerRegeneration(parser); 
       } else if (name.equals("RegenWaste")) 
       { 
        RegenWaste = readRegenWaste(parser); 
       } else if (name.equals("Level")) 
       { 
        Level = readLevel(parser); 
       } else if (name.equals("PSI")) 
       { 
        PSI = readPSI(parser); 
       } else 
       { 
        skip(parser); 
       } 

      }    

      return new Flows(ReportDate, TimeMeterRead, Influent14, Influent15, 
      WaterTreated14, WaterTreated15, TotalWaterTreated, Softener1, 
      WaterSoftened1, Softener2, WaterSoftened2, Softener3, 
      WaterSoftened3, Softener4, WaterSoftened4, Softener5, WaterSoftened5, 
      WaterByPassed, TotalByPassed, SaltUsed, SoftenerRegeneration, 
      RegenWaste, Level, PSI); 
     } 

XML代碼:

<xml><flows> 
<TotalWaterTreated>200</TotalWaterTreated> 
<ReportDate>6/30/2013</ReportDate> 
<TimeMeterRead>0700</TimeMeterRead> 
<Influent14>100</Influent14> 
<Influent15>100</Influent15> 
<WaterTreated14>100</WaterTreated14> 
<WaterTreated15>100</WaterTreated15> 
<Softener1>100</Softener1> 
<WaterSoftened1>100</WaterSoftened1> 
<Softener2>100</Softener2> 
<WaterSoftened2>100</WaterSoftened2> 
<Softener3>100</Softener3> 
<WaterSoftened3>100</WaterSoftened3> 
<Softener4>100</Softener4> 
<WaterSoftened4>100</WaterSoftened4> 
<Softener5>100</Softener5> 
<WaterSoftened5>100</WaterSoftened5> 
<WaterByPassed>200</WaterByPassed> 
<TotalByPassed>100</TotalByPassed> 
<SaltUsed>10</SaltUsed> 
<SoftenerRegen>100</SoftenerRegen> 
<RegenWaste>10</RegenWaste> 
<Level>10</Level> 
<PSI>10</PSI> 
</flows></xml> 

回答

0

那麼代碼看起來好像沒什麼問題,很奇怪,但細,你嘗試實際上調試,並在循環看着解析器對象的值,而? 名稱在某些情況下可能僅僅是不等於你想要的,這就是爲什麼它跳過它,這將意味着在解析器代碼或實際上有一個錯誤XML

+0

我還沒有完全一步一步地進行調試,但是我已經找到了這條路線。我將xml文件添加到問題中,但是我從腳本生成了結構,因此在那裏不應該存在問題。 – Jim

+0

我發現我的問題在代碼的另一部分。我以某種方式刪除了解析器中跳過不需要的xml元素的部分中的「break」。我的代碼現在已修復。 – Jim

+0

告訴你哈哈,我很高興你有它的工作 – aehs29