android开发分享改进callback获得响应正文

我正在testingRetrofit与Volley进行比较,我正努力从我的请求中得到回应。 例如,我做这样的事情:

RestAdapter restAdapter = new RestAdapter.Builder() .setEndpoint("https://localhost:8080") .build(); MyService service = restAdapter.create(MyService.class); service.getToto("toto", new Callback<Toto>() { @Override public void success(Toto toto, Response response) { // Try to get response body BufferedReader reader = null; StringBuilder sb = new StringBuilder(); try { reader = new BufferedReader( new InputStreamReader(response.getBody().in())); String line; try { while ((line = reader.readLine()) != null) { sb.append(line); } } catch (IOException e) { e.printStackTrace(); } } catch (IOException e) { e.printStackTrace(); } String result = sb.toString(); } @Override public void failure(RetrofitError error) {} }); 

它的工作原理是,设置对象toto ,但出于testing目的,我也想显示服务器返回的JSON响应。

所以我正在尝试从TypedInputStream response.getBody()这是一个TypedInputStream读取InputStream 。 不幸的是,我总是得到一个IOException : Stream is closed

我试图从Retrofit使用Utils类,但是我得到相同的IOException错误。

    在callback的尖括号内写入“Response”,然后从这个响应中提取stream。

     service.getToto("toto", new Callback<Response>() { @Override public void success(Response result, Response response) { //Try to get response body BufferedReader reader = null; StringBuilder sb = new StringBuilder(); try { reader = new BufferedReader(new InputStreamReader(result.getBody().in())); String line; try { while ((line = reader.readLine()) != null) { sb.append(line); } } catch (IOException e) { e.printStackTrace(); } } catch (IOException e) { e.printStackTrace(); } String result = sb.toString(); } @Override public void failure(RetrofitError error) { } }); 

    在Retrofit 2.0之前

      String bodyString = new String(((TypedByteArray) response.getBody()).getBytes()); 

    改造2.0

      String bodyString = new String(response.body().bytes()); 

    如果在用于创build服务的RestAdapter上设置.setLogLevel(RestAdapter.LogLevel.FULL) ,则应该在debugging控制台中获取原始JSON响应输出。

     RestAdapter restAdapter = new RestAdapter.Builder() .setServer("https://my_lovely_api.com") .setLogLevel(RestAdapter.LogLevel.FULL) .build(); mService = restAdapter.create(MyService.class); 

    如果你想对这个原始的响应做一些不同的事情,你仍然可以使用你的成功块中的代码来创build一个JSONstring,假设你在setLogLevel方法中保留了LogLevel.FULL ,否则就不会parsingInput.getBody response.getBody().in() InputStream,因为它已被读取和closures。

    我最近遇到了类似的问题。 我想看看响应正文中的一些JSON,但不想处理来自Retrofit的TypedByteArray。 我发现最快捷的方法是用一个string字段来创build一个Pojo(普通的旧Java对象)。 更一般地说,你会做出一个Pojo,其中一个字段对应于你想查看的任何数据。

    例如,假设我正在发出一个请求,其中来自服务器的响应是响应主体中的单个string,名为“access_token”

    我的Pojo看起来像这样:

     public class AccessToken{ String accessToken; public AccessToken() {} public String getAccessToken() { return accessToken; } } 

    然后我的callback看起来像这样

     Callback<AccessToken> callback = new Callback<AccessToken>() { @Override public void success(AccessToken accessToken, Response response) { Log.d(TAG,"access token: "+ accessToken.getAccessToken()); } @Override public void failure(RetrofitError error) { Log.E(TAG,"error: "+ error.toString()); } }; 

    这将使您能够查看您在回复中收到的内容。

    请不要使用stream和straemReaders这个。 使用智能解决scheme,如方形:

     private Response logAndReplaceResponse(String url, Response response, long elapsedTime) 

    例:

     private String getResponseBody(Response response) { String result = ""; //Try to get response body if (response.getBody() instanceof TypedByteArray) { TypedByteArray b = (TypedByteArray) response.getBody(); result = new String(b.getBytes()); } return result; } 

    另一个解决办法是做如下的事情:

      private static String bodyAsString(RequestBody body) { try { Buffer buffer = new Buffer(); body.writeTo(buffer); return buffer.readString(body.contentType().charset()); } catch (IOException e) { throw new RuntimeException(e); } } 

    取自

    在版本2.1.0中,您可以获取内容

     public void onResponse(Call<T> call, Response<T> response) { String errorString = response.errorBody().string(); } 

    只是这样做:

     ModelClass modelclass=response.response.body() System.out.println("****************-----retro rsp----1-------"+modelclass.getMessage()); 

    在你的响应模型中,按下cmd + n并覆盖“toString”方法,只调用response.toString();

    以上就是android开发分享改进callback获得响应正文相关内容,想了解更多android开发(异常处理)及android游戏开发关注计算机技术网(www.ctvol.com)!)。

     @Override public String toString() { return "{" + "key_one='" + var_keyone + ''' + ", key_two='" + var_keytwo + ''' + '}'; } 

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/addevelopment/513971.html

      (0)
      上一篇 2020年11月29日
      下一篇 2020年11月29日

      精彩推荐