2017-05-17 155 views
-2

我是新來的android工作室和麪向對象的編程,所以一般道歉,如果這是顯而易見的,但我不能讓我的頭圍繞它。我有一個小型的XML Web服務器,我可以連接到它併發送數據,我也可以讀回來並在顯示器中查看它。我想解析XML,但無法使其正常工作。Xml從字符串解析問題

該行 「System.out.println(output);」 以字符串形式向我提供服務器的輸出。

響應是從一個字符串保存的,但我認爲我需要一個不同的格式來做一個拉解析器。該程序基本上打印這個字符串,然後崩潰。解析我的數據的最佳方式是什麼?任何幫助將非常感激。

public class HTTPRequestTask extends AsyncTask<String , Void, String > { 
@Override 
protected String doInBackground(String... args) { 
    String IP = args[0]; 
    System.out.println(IP); 
    try { 
     URL url = new URL(IP); 
     XmlPullParser recievedData = XmlPullParserFactory.newInstance().newPullParser(); 
     recievedData.setInput(url.openStream(),null); 
     System.setProperty("http.keepAlive", "false"); 
     HttpURLConnection conn = (HttpURLConnection) url.openConnection(); 
     conn.setRequestMethod("GET"); 
     conn.setRequestProperty("Accept", "application/json"); 


     if (conn.getResponseCode() != 200) { 
      throw new RuntimeException("Failed : HTTP error code : " 
        + conn.getResponseCode()); 
     } 

     BufferedReader br = new BufferedReader(new InputStreamReader(
       (conn.getInputStream()))); 

     String output; 

     System.out.println("Output from Server .... \n"); 
     while ((output = br.readLine()) != null) { 
      System.out.println(output); 

     } 
     XmlPullParser parser = Xml.newPullParser(); 
     parser.setInput(new StringReader(output)); 

     System.out.println("doc"); 
     System.out.println(parser); 
     System.out.println("Disconnecting\n"); 
     conn.disconnect(); 
     System.out.println(recievedData); 
     processRecievedData(recievedData); 

     String[] separated = output.split("F"); 
     // separated[0]; // this will contain "Fruit" 
     // separated[1]; // this will contain " they taste good" 
     //System.out.println(separated); 

    } catch (MalformedURLException e) { 

     e.printStackTrace(); 

    } catch (IOException e) { 

     e.printStackTrace(); 

    } catch (XmlPullParserException e) { 
     e.printStackTrace(); 

    } 

    return null; 
} 

我也嘗試使用文檔,但我不知道是在和我是否可以打印它像什麼格式的文檔。

public Document GetData(String output){ 
    try { 
     DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance(); 
     DocumentBuilder builder = null; 
     builder = builderFactory.newDocumentBuilder(); 
     //Document xmlDoc = builder.parse(output); 
     //System.out.println(xmlDoc); 
    } catch (Exception e) { 
     e.printStackTrace(); 
     return null; 
    } 
    return null; 
} 
+2

您在文本線路來讀取線,扔掉所有,但最後一行。這不太可能導致有效的XML。除此之外,使用LogCat檢查與您的崩潰相關的Java堆棧跟蹤:https://stackoverflow.com/questions/23353173/uncomfort-myapp-has-stopped-how-can-i-solve-this – CommonsWare

回答

-1

有不同的方法來解析您的XML。這取決於您的XML格式的結構。您只需爲XML格式找到合適的解析器並按照適當的步驟進行操作即可。最後一件事確保你使用相同的鍵來獲取數據。 嘗試首先正確理解結構,然後它不是什麼大不了的事情。試試這些教程,並將您的XML格式與這些教程中給出的示例進行比較。

https://developer.android.com/training/basics/network-ops/xml.html

https://www.tutorialspoint.com/android/android_xml_parsers.htm

http://www.androidhive.info/2011/11/android-xml-parsing-tutorial/

+0

這不是問題。見[CommonsWare的評論](http://stackoverflow.com/questions/44035463/xml-parsing-issue-from-string#comment75097654_44035463) – Andreas