XML解析使用Java没有得到任何回应

问题描述:

正试图从URL中获取XML文件,但没有得到响应,并且代码稍后停止,因为字符串xml为null,你能告诉我最新的问题吗?XML解析使用Java没有得到任何回应

public String getXmlFromUrl(String url) { 
String xml = null; 

    try { 


     DefaultHttpClient httpClient = new DefaultHttpClient(); 
     HttpPost httpPost = new HttpPost(url); 
     HttpResponse httpResponse = httpClient.execute(httpPost); 
        // I printed the response here but I got nothing ! 
     HttpEntity httpEntity = httpResponse.getEntity(); 
     xml = EntityUtils.toString(httpEntity); 
        return xml; 


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

请具体说明在你的答案我感谢你的帮助

+0

您是否在浏览器中检查了URL,如果它返回一些数据? –

+0

您是否尝试打印'xml'? xml = EntityUtils.toString(httpEntity); – rahul

+0

@DmytroDanylyk是的,我做了,它的工作正常 –

为什么你正在使用HTTPPost?你甚至没有发送任何数据。尝试使用HttpGet。

试试这个:

public String getXmlFromUrl(String url) throws Exception { 
    return new AsyncTask<String, Void, String>() { 
     @Override 
     protected String doInBackground(String... params) { 
      String xml = null; 
      try { 
       DefaultHttpClient httpClient = new DefaultHttpClient(); 
       HttpGet httpPost = new HttpGet(params[0]); 
       HttpResponse httpResponse = httpClient.execute(httpPost); 
       // I printed the response here but I got nothing ! 
       HttpEntity httpEntity = httpResponse.getEntity(); 
       xml = EntityUtils.toString(httpEntity); 
       Log.i("DEMO", xml); 

      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
      return xml; 
     } 
    }.execute(url).get(); 

} 
+0

但这个“Document doc = parser.getDomElement(xml); //获取DOM元素”不再工作 –

+0

这是一件有趣的事情,创建一个asynctask并用相同的方法等待答案。我不明白你为什么要那样做? – njzk2

+0

我刚刚纠正了他的答案... –

尝试例如启动从单独的线程代码

new Thread(new Runnable() 
{ 

    @Override 
    public void run() 
    { 
     // TODO your code here 

    } 
    }).start(); 

试试这个:

try { 

    items = new ArrayList<String>(); 

    XmlPullParserFactory factory = XmlPullParserFactory.newInstance(); 
    factory.setNamespaceAware(true); 
    XmlPullParser xpp = factory.newPullParser(); 
    xpp.setInput(new InputStreamReader(
      getUrlData(" url"))); 

    while (xpp.getEventType() != XmlPullParser.END_DOCUMENT) { 
     Log.i(TAG, "doc started"); 
     if (xpp.getEventType() == XmlPullParser.START_TAG) { 
      if (xpp.getName().equals("entry")) { 
       items.add(xpp.getAttributeValue(0)); 
      } 
     } 
     xpp.next(); 

    } 
} catch (Throwable t) { 
    Toast.makeText(this, "Request failed: " + t.toString(), 
      Toast.LENGTH_LONG).show(); 
} 

为geturldata()

public InputStream getUrlData(String url) throws URISyntaxException, 
    ClientProtocolException, IOException { 

DefaultHttpClient client = new DefaultHttpClient(); 
HttpGet method = new HttpGet(new URI(url)); 
HttpResponse res = client.execute(method); 
return res.getEntity().getContent(); 

}

你应该明白例外。 xml的原因是null是因为'某些事情'出了问题。这扔了一个Exception,可能很好地描述了哪里出了问题。当发生这种情况时,Exception被抛出,直到有人处理它。

Exception的每个子类都有不同的“风味”,并在特定情况下抛出。这使您能够对错误做出“反应”。例如,您可以告诉用户出了什么问题,或者为了调试而记录某​​些内容。

就你而言,你在一个地方“捕捉”所有异常,当发生异常时,执行catch (Exception e)之后的代码。你在这里什么都不做,只是打印出一些东西(这在LogCat中会显示为橙色)。然后你继续,好像什么都没发生。但是xml将为null,这对您的程序不利,而且您显然没有注意到LogCat项,因为您的程序在稍后崩溃。

这一次,Eldhose M Babu解决了您的问题。下一次,当其他事情出错(并且很多可能在htttp请求中出错)时,您的程序将显示相同的行为。尝试阅读例外情况,并在处理它们过于沉默时小心。

+0

我处理了每个例外dw thx for ur help –