2017-05-17 125 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