我正在尝试从URL读取JSON数据,并且我得到了一个非常奇怪的行为。 我有一个ExpandableListView,每个项目都有一个按钮来恢复在线数据。 第一次单击按钮时,它可以正常工作,但任何后续尝试都会失败。 在这些尝试中,readLine方法返回奇怪的字符:
YoFW< 2E =PHω/mKr)NERݥ%ޙ)! [R [W<乐:大井&安培; N9 DT171< ejeWք * 80nR,/`(+ d%d'“
我无法理解为什么它只在第一次起作用。 甚至更奇怪的是,它发生在物理设备上,而不是在仿真器上。 我的代码是:
public static String readContents(String url) {
HttpURLConnection con = getConnection(url);
if (con==null)
return null;
try {
StringBuilder sb = new StringBuilder(8192);
String tmp;
BufferedReader br = new BufferedReader(new InputStreamReader(con.getInputStream(), "UTF8"));
while((tmp = br.readLine()) != null)
sb.append(tmp).append("\n");
br.close();
return sb.toString();
} catch(IOException e) {
Log.d("READ FAILED", e.toString());
return null;
}
}
答案 0 :(得分:2)
请务必致电
con.disconnect();
在最后的finally
块中关闭连接,否则你最终会打开许多你没有使用过的连接。这可能会导致问题。
还有点
con.setRequestMethod("GET");
con.setRequestProperty("Accept-Charset", "UTF-8");
和
con.setRequestProperty("Accept", "application/json");
不会出错。
您还应该检查conn.getResponseCode()
的值以查看服务器是否返回错误。 200
和299
之间的任何内容都是成功代码。
答案 1 :(得分:0)
我使用Apache的EntityUtils重写了我的代码,现在它正在运行:
static String response = null;
public static String readContents(String url) {
try {
// http client
DefaultHttpClient httpClient = new DefaultHttpClient();
HttpEntity httpEntity = null;
HttpResponse httpResponse = null;
HttpGet httpGet = new HttpGet(url);
httpResponse = httpClient.execute(httpGet);
httpEntity = httpResponse.getEntity();
response = EntityUtils.toString(httpEntity);
} catch (IOException e) {
Log.d("READ FAILED", e.toString());
return null;
}
return response;
}