【问题标题】:"StringBuffer sb = new StringBuffer()" get a null value in Android“StringBuffer sb = new StringBuffer()”在Android中得到一个空值
【发布时间】:2013-08-04 16:39:41
【问题描述】:

我在我的http get请求中使用了下面的代码,但是我从return得到的是一个null。我不知道为什么。

  public static String getResponseFromGetUrl(String url) throws Exception {

               StringBuffer sb = new StringBuffer();


                try {
                    HttpResponse httpResponse = httpclient.execute(httpRequest);

                    String inputLine = "";

                    if (httpResponse.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {

                        InputStreamReader is = new InputStreamReader(httpResponse
                                .getEntity().getContent());
                        BufferedReader in = new BufferedReader(is);
                        while ((inputLine = in.readLine()) != null) {

                            sb.append(inputLine);
                        }

                        in.close();

                    }
                } catch (Exception e) {
                    e.printStackTrace();
                    return "net_error";         
                } finally {
                    httpclient.getConnectionManager().shutdown();
                }

                return sb.toString();

   }

而我使用的功能是

  String json_str = HttpUtils.getResponseFromGetUrl("www.xxx.com/start");
   if ((json_str == null)) Log.d("Chen", "lastestTimestap----" + "json_str == null");

有时会打印日志。并非总是如此,实际上就像 1%。但我不知道为什么会导致它。

【问题讨论】:

  • 我们能看到更多代码吗?你如何确定它是空的?
  • 也许你不小心做了sb.append("null");之类的事情。
  • @dystroy 我已经编辑了代码
  • @johnchen902 我编辑代码
  • 显示的方法getResponseFromGetUrl在任何情况下都不能返回null。要么您没有在问题中显示真实代码,要么调用它的函数实际上调用了不同的方法(例如,在不同的类中)。

标签: java android stringbuffer


【解决方案1】:

此代码不会产生“null”。一定有更多的代码你没有显示。

如果这是您拥有的所有代码,我建议您删除 StringBuffer 并将其替换为

return "";

您很可能忘记提及一些正在执行类似操作的代码

Object o = null;

sb.append(o); // appears as "null"

编辑:根据您的更新,我不得不假设您正在阅读“null”之类的行

您不太可能希望丢弃每行之间的换行符。我建议你要么 append("\n") 或者只记录你得到的所有文本而不考虑换行。

顺便说一句,请不要使用 StringBuffer,因为它的替代品 StringBuilder 已经存在了将近十年。有一个普遍的误解,认为使用 StringBuffer 有助于多线程,但更常见的是它会导致错误的代码,因为在多线程上下文中正确使用 StringBuffer 是非常困难的,如果不是不可能的话

【讨论】:

  • 他没有在任何地方提到 NullPointerException。
  • 非常感谢。但事实上我没有这样做。所以我很困惑
  • @MarshalChen 除非您准确打印出您输入的内容,否则您如何确定?
  • 我不确定输入是什么,但我认为字符串缓冲区可能是 "" ,但不能为空,因为我已经创建了它
  • @MarshalChen 如果是null,您会看到 NullPointerException。要查看null,您必须在文本中包含它,即它是"null" 而不是null
猜你喜欢
  • 1970-01-01
  • 2012-12-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多