BufferedReader没有从HttpsURLConnection读取整个JSON

时间:2016-05-15 01:09:52

标签: java android json

我试图从网站上读取JSON文本;我有URL,它连接正常。我目前的代码是:

BufferedReader br = new BufferedReader(new InputStreamReader(con.getInputStream()));

                String input;


                while ((input = br.readLine()) != null){
                    JSONObject j = new JSONObject(input);

                    Log.d(TAG,j.toString(4));
                }

                br.close();
但是,

它无法从整个HttpsURLConnection中读取JSON。为Android做日志我看到它已经中途停止了。我认为它可能与输入或BufferedReader的大小有关,但我不确定如何继续。

编辑:这是日志

在第一个建议之后仍然没有得到它。

05-14 17:37:29.070 3707-3755/asundar.sharks D/OpenGLRenderer: Use EGL_SWAP_BEHAVIOR_PRESERVED: true

                                                          [ 05-14 17:37:29.070  3707: 3707 D/         ]
                                                          HostConnection::get() New Host Connection established 0x7f0411c26ec0, tid 3707


                                                          [ 05-14 17:37:29.120  3707: 3755 D/         ]
                                                          HostConnection::get() New Host Connection established 0x7f040937e280, tid 3755

05-14 17:37:29.140 3707-3755 / asundar.sharks I / OpenGLRenderer:初始化的EGL,版本1.4 05-14 17:37:29.210 3707-3707 / asundar.sharks E / RecyclerView:没有连接适配器;跳过布局 05-14 17:37:29.240 3707-3707 / asundar.sharks E / RecyclerView:没有连接适配器;跳过布局

3 个答案:

答案 0 :(得分:1)

由于JSONParser会在运行时因为JSON漂亮打印问题而解析为“文件结束异常”的解析错误。

您可以尝试以下逻辑。

        String output;
        JSONObject jsonObject = null;
        StringBuilder stBuild = new StringBuilder();
        JSONParser parser = new JSONParser();
        LOGGER.debug("conn: {}", conn);
        // fetching NC response in form of buffer reader.
        BufferedReader br = new BufferedReader(new 
        InputStreamReader((conn.getInputStream())));
        // reading line using bufferReader
        while ((output = br.readLine()) != null) {
            // parsing string into object.
            stBuild.append(output);
            Object obj = parser.parse(stBuild.toString());
            jsonObject = (JSONObject) obj;
            // casting object into JSONObject
        }

答案 1 :(得分:0)

安全的方式:

   BufferedReader br = new BufferedReader(new InputStreamReader(con.getInputStream()));
   StringBuilder b = new StringBuilder();
   String input;

   while ((input = br.readLine()) != null){
        b.append(input);                 
   }

   JSONObject j = new JSONObject(b.toString());

   // this should be in finally block
   br.close();

修改

基本上响应已满(根据您发送的代码而定),您面临的问题只是 Logcat文本限制 Logcat打印的响应太长,这就是为什么你在输出中崩溃的原因。

答案 2 :(得分:0)

首先,尝试CURLing URL查看服务器发送的内容。

其次,如果您认为它与缓冲区大小有关,请将Apache HttpClient之类的内容替换为HttpsURLConnection并从那里开始。