0

以下のコードを http get リクエストで使用していますが、戻り値から得られるものは 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% のようです。しかし、なぜそうなったのかはわかりません。

4

1 に答える 1

3

このコードは「null」を生成しません。表示されていないコードがもっとあるはずです。

これがすべてのコードである場合は、StringBuffer を削除して置き換えることをお勧めします。

return "";

次のようなことをしているコードに言及するのを忘れている可能性が高いです

Object o = null;

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

編集:更新に基づいて、「null」のような行を読んでいると想定する必要があります

各行の間の改行を破棄したいということはほとんどありません。append("\n") を追加するか、新しい行に関係なく取得したすべてのテキストを記録することをお勧めします。

ところで、StringBuffer を使用しないでください。その代替となる StringBuilder は、ほぼ 10 年間使用されています。StringBuffer を使用するとマルチスレッドに役立つという一般的な誤解がありますが、多くの場合、マルチスレッド コンテキストで StringBuffer を正しく使用することは不可能ではないにしても、非常に困難であるため、正しくないコードが生成されます。

于 2013-08-03T13:24:20.020 に答える