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

时间:2012-09-03 13:02:32

标签: java android xml httpresponse

我试图从URL获取XML文件但是没有得到响应并且代码因为String xml为空而稍后停止,你能告诉我这是什么问题吗?

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();
    }

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

5 个答案:

答案 0 :(得分:1)

为什么使用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();

}

答案 1 :(得分:0)

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

 new Thread(new Runnable()
 {

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

    }
  }).start();

答案 2 :(得分:0)

试试这个:

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();
}

答案 3 :(得分:0)

用于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();

}

答案 4 :(得分:0)

您应该了解例外。 xml是null的原因是因为'某事'出了问题。这引发了一个Exception,可能很好地描述了出了什么问题。发生这种情况时,Exception会被“抛出”,直到有人处理它为止。

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

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

这一次,Eldhose M Babu解决了你的问题。下一次,当其他问题出现时(在htttp请求中可能出现很多问题),您的程序将显示相同的行为。尝试阅读异常,并在处理它们时要小心谨慎。