我试图从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();
}
请在答案中具体说明我感谢您的帮助
答案 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请求中可能出现很多问题),您的程序将显示相同的行为。尝试阅读异常,并在处理它们时要小心谨慎。