【问题标题】:extract message body out of HttpResponse从 HttpResponse 中提取消息体
【发布时间】:2011-08-05 04:54:56
【问题描述】:

好的,我已经成功连接到远程服务器并收到HTTP/1.1 200 OK 响应,并且响应被打包到 HttpResponse 对象中。现在如何从中获取响应中的数据,特别是从服务器发送的 JSON?

【问题讨论】:

    标签: android json httpresponse


    【解决方案1】:

    类似这样:在此处复制:How do I parse JSON from a Java HTTPResponse?

    HttpResponse response; // some response object
    BufferedReader reader = new BufferedReader(new InputStreamReader(response.getEntity().getContent(), "UTF-8"));
    String json = reader.readLine();
    JSONTokener tokener = new JSONTokener(json);
    JSONArray finalResult = new JSONArray(tokener);
    

    【讨论】:

      【解决方案2】:

      好吧,你可以通过调用getEntity() 来获取HttpResponse 的主体,它返回一个HttpEntity 类型的对象。然后,您将需要使用从HttpEntitygetContent() 方法返回的InputStream。我会这样做:

      public static String entityToString(HttpEntity entity) {
        InputStream is = entity.getContent();
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(is));
        StringBuilder str = new StringBuilder();
      
        String line = null;
        try {
          while ((line = bufferedReader.readLine()) != null) {
            str.append(line + "\n");
          }
        } catch (IOException e) {
          throw new RuntimeException(e);
        } finally {
          try {
            is.close();
          } catch (IOException e) {
            //tough luck...
          }
        }
        return str.toString();
      }
      

      【讨论】:

        【解决方案3】:

        您也可以使用 EntityUtils

        response = cl.execute(p); //cl is http client and p is the post request
        
        if(response.getStatusLine().getStatusCode()==200)
        {
            try
            {
                String resp_body = EntityUtils.toString(response.getEntity());
                Log.v("resp_body", resp_body.toString());
                JSONObject jsobj = new JSONObject(resp_body);
            }
            catch(Exception e)
            {
        
               Log.e("sometag",e.getMessage());
             }
        }
        

        PS : 您可能必须在主线程之外的单独线程中执行此操作,例如在 AsyncTask 的 doInBackground() 中,或者可能会发生主线程上的网络操作异常。

        【讨论】:

          【解决方案4】:

          调用 httpclient.execute() 时使用 BasicResponseHandler

          ResponseHandler <String> resonseHandler = new BasicResponseHandler();
          String response = httpclient.execute(httpget, resonseHandler);
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2020-10-17
            • 1970-01-01
            • 2019-07-16
            • 1970-01-01
            • 2018-01-27
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多