BufferedReader readLine返回奇怪的字符

时间:2014-09-27 18:36:34

标签: java android bufferedreader

我正在尝试从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;
        }
    }

2 个答案:

答案 0 :(得分:2)

请务必致电

con.disconnect();

在最后的finally块中关闭连接,否则你最终会打开许多​​你没有使用过的连接。这可能会导致问题。

还有点

con.setRequestMethod("GET");
con.setRequestProperty("Accept-Charset", "UTF-8"); 

con.setRequestProperty("Accept", "application/json");

不会出错。

您还应该检查conn.getResponseCode()的值以查看服务器是否返回错误。 200299之间的任何内容都是成功代码。

答案 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;
    }