2016-12-29 35 views
-1

我想从Android中使用HTTP获取方法从URL获取XML文件。当我在浏览器中输入网址时,我得到了XML文件。但是,当我尝试在Android中使用HttpURLConnection时,输入流始终为空。我试图找出问题,但徒劳无功。我想了解一些问题。
这里是我的代码:
XML文件在Android中从URL获取XML显示空错误

<?xml version="1.0" encoding="UTF-8"?> 
<item> 
    <log>27.1823000000</log> 
    <lat>88.5012200000</lat> 
</item> 

异步任务

private class GetOnlineData extends AsyncTask<Void, Void, String>{ 

     @Override 
     protected String doInBackground(Void... voids){ 
      String latlog=null; 

      // Accessing link to obtain XML file 
      try{ 
       URL url = new URL(link); 
       HttpURLConnection htc = (HttpURLConnection) url.openConnection(); 
       inputStream = htc.getInputStream(); 
      }catch(Exception e){} 

      // Parsing XML data from input stream 
      if(inputStream!=null){ 
       try { 
        DocumentBuilderFactory xmlparser = DocumentBuilderFactory.newInstance(); 
        DocumentBuilder dBuilder = xmlparser.newDocumentBuilder(); 
        Document dc = dBuilder.parse(inputStream); 

        Element ele = dc.getDocumentElement(); 
        ele.normalize(); 

        NodeList nodeList = dc.getElementsByTagName("item"); 

        for (int i=0; i<nodeList.getLength(); i++){ 
         Node node = nodeList.item(i); 
         if(node.getNodeType() == Node.ELEMENT_NODE){ 
          Element ele2 = (Element) node; 
          latlog = "Longitude: "+getValue("log",ele2)+"\n"; 
          latlog += "Latitude: "+getValue("lat",ele2); 
         } 
        } 
       } catch (Exception e){ 
        e.printStackTrace(); 
       } 
      } 

      return latlog; 
     } 

     @Override 
     protected void onPostExecute(String latlog){ 
      if(inputStream==null) { 
       Toast.makeText(getApplicationContext(), "Didn't Work", Toast.LENGTH_SHORT).show(); 
      } else { 
       textView.setText(latlog); 
      } 
     } 
    } 

的getValue(字符串,元)

private static String getValue(String tag, Element element) { 
     NodeList nodeList = element.getElementsByTagName(tag).item(0).getChildNodes(); 
     Node node = nodeList.item(0); 
     return node.getNodeValue(); 
    } 
+0

XML是一种古老的方式,为什么不切换到JSON?简单而好用 –

+0

为此,我需要知道如何使用_python-cgi-script_发送_json_对象。你能指出我一个体面的教程如何做到这一点?这将是非常有帮助的。 @teckwei – dannyBoy

+0

嗯..我使用PHP的服务器端。 0 python知识我敢打赌,你可以谷歌它。 –

回答

1

似乎问题不在您的源代码中,而是在访问服务器中。可能是网址有误(错字在URL) - 所以叫

URL url = new URL(link); 

之前检查link变量的值可能会出现一些参数丢失。并尝试分析响应代码:

int responseCode = htc.getResponseCode(); 
if (responseCode == HttpURLConnection.HTTP_OK) { 
    inputStream = htc.getInputStream(); 
    ... 
} 

,可能HttpURLConnection的should be configured like htc.setRequestMethod( “GET”);'或类似的东西:HTTP认证,代理,饼干等(见Official Documentation)。

+0

问题确实发生在我的服务器上。我检查了服务器的错误日志,发现由于缺少_Accept Header_,_mod-security-anormalies_拒绝了请求。我应该使用android给出什么样的_Accept Header_请求?另外,我如何添加它。或者,删除特定的安全措施会更好吗? – dannyBoy

+0

请看[Cyril Beschi]的[this](http://stackoverflow.com/a/15555952/6950238)答案(http://stackoverflow.com/users/2196599/cyril-beschi)。 –