我正在创建一个Android应用程序,为此我必须从URL获取JSON内容(由某些python脚本输出)。
我在SO上找到了一种方法,但是我无法让它发挥作用。这是代码:
public String webGet(String URL) throws Exception
{
BufferedReader in = null;
try
{
HttpClient client = new DefaultHttpClient();
client.getParams().setParameter(CoreProtocolPNames.USER_AGENT, "android");
HttpGet request = new HttpGet();
request.setHeader("Content-Type", "text/html; charset=utf-8");
request.setURI(new URI(URL));
// Crashes after executing this line
HttpResponse response = client.execute(request);
in = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
StringBuffer sb = new StringBuffer("");
String line = "";
String NL = System.getProperty("line.separator");
while ((line = in.readLine()) != null)
{
sb.append(line + NL);
}
in.close();
String page = sb.toString();
//System.out.println(page);
return page;
}
finally
{
if (in != null)
{
try
{
in.close();
}
catch (IOException e)
{
Log.d("BBB", e.toString());
}
}
}
}
此次崩溃发生在此行之后:
HttpResponse response = client.execute(request);
然后它只是跳转到finally
部分,我可以从异常消息得到的是null
。它就是全部。
任何人都知道问题可能是什么?
异常说明的屏幕截图:
答案 0 :(得分:0)
您应该尝试捕获异常而不是抛出它,这样您就可以获得有关错误的更多信息。
try {
} catch (ExceptionType name) {
} catch (ExceptionType name) {
}
http://docs.oracle.com/javase/tutorial/essential/exceptions/catch.html
答案 1 :(得分:0)
在某些Android版本中,您无法从“主”主题执行网络操作。这是为了确保您的应用仍然对最终用户做出响应,即使它做了一些阻塞,网络操作需要很长时间。
你需要在另一个线程中执行该操作。