0

我试图从 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();
    }

请具体回答我感谢您的帮助

4

5 回答 5

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

}
于 2012-09-03T13:20:43.057 回答
0

尝试从单独的线程开始你的代码,例如

 new Thread(new Runnable()
 {

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

    }
  }).start();
于 2012-09-03T13:26:08.193 回答
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();
}
于 2012-09-03T13:38:08.060 回答
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();

}

于 2012-09-03T13:44:47.697 回答
0

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

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

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

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

于 2012-09-03T13:59:14.913 回答