当前位置: 首页 > 知识库问答 >
问题:

如何使用改装2.0获得原始响应和请求

王高超
2023-03-14

我正试图通过改型2获得原始响应。0.2.

到目前为止,我试图使用以下代码行打印响应,但它打印的是地址,而不是确切的响应正文。

日志i(“原始消息”,response.body()。toString());

compile'com。收拾一下。改装2:改装:2.0.2'

    Retrofit retrofit = new Retrofit.Builder()
                    .baseUrl(BASE_URL)
                    .addConverterFactory(GsonConverterFactory.create())
                    .build();


            GitApi gitApi = retrofit.create(GitApi.class);

            Call<Addresses> call = gitApi.getFeed(user);

    call.enqueue(new Callback<Addresses>() {

                @Override
                public void onResponse(Response<Addresses> response, Retrofit retrofit) {
                    try {
                        mDisplayDetails.setText(response.body().getSuburbs().get(0).getText());

                    **Log.i("RAW MESSAGE",response.body().toString());**

                    } catch (Exception e) {
                        mDisplayDetails.setText(e.getMessage());
                    }
                    mProgressBar.setVisibility(View.INVISIBLE);

                }

                @Override
                public void onFailure(Throwable t) {
                    mDisplayDetails.setText(t.getMessage());
                    mProgressBar.setVisibility(View.INVISIBLE);

                }
            });

共有3个答案

谭凯
2023-03-14

简单使用:

Log.i("RAW MESSAGE", response.raw().body().string());

或者:

Log.i("RAW MESSAGE", response.body().string());
于嘉许
2023-03-14

您必须在通话中使用okhttp3中的“ResponseBook”。然后,获取“response.body().string()”以获取服务器提供给您的JSONObject。如果在解析服务器对模型对象的响应时出现任何错误,这是捕获错误的好方法。

汝和裕
2023-03-14

这是因为它已经通过转换器转换为对象。要获得原始的json,您需要在您的Http客户端上拦截器。谢天谢地,您不需要编写自己的类,Square已经为您提供了HttpLoggingInterceptor类。

将此添加到你的应用程序级别gradle

compile 'com.squareup.okhttp3:logging-interceptor:3.5.0'

并在您的OkHttpClient中使用它

HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor();
interceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
OkHttpClient client = new OkHttpClient.Builder()
                .addInterceptor(interceptor).build();

别忘了在改造中更换您的HttpClient。

Retrofit retrofit = new Retrofit.Builder()
            .client(client)               
            .baseUrl("https://yourapi.com/api/")
            .build();

在Log Cat中,您将看到原始json响应。有关更多信息,请访问Square的OkHttp github。

小心

不要忘记在生产中删除拦截器(或将日志记录级别更改为无)!否则人们将能够在Log Cat上看到您的请求和响应。

 类似资料:
  • 我正在使用调用web服务,而reverfit会引发一个失败,来自“throwable”的消息会给我 我假设这是因为.NET web服务抛出了一个错误而没有返回JSON。但是为了证明这一点,我需要能够看到中的原始响应。有没有什么我能做到的? 这是我使用的代码

  • 因此,当我对服务器进行POST API调用时,我得到一个带有JSON响应的400 Bad Request错误。 我管它叫 然而,问题是,一旦我得到响应,就调用onFailure(),这样就调用了//bb。在这里,我无法访问JSON响应。当我记录api请求和响应时,它根本不显示JSON响应。而可抛出的t是IOException。然而,奇怪的是,当我对Postman进行相同的调用时,它确实返回了预期的

  • 在referfit中,您只能读取response.body()一次,因为它是一个流,一旦调用或自动转换为返回类型中的任何模型类,它就会自动关闭。如果你尝试读两次,那么你会得到上面的错误。 我既需要原始响应字符串,也需要模型类。做这件事最好的方法是什么?我不想调用两次API。有什么方法可以复制响应体吗?理想情况下,我希望简单地获取String并返回响应。也就是说,不必放弃改型带来的通用类型转换器的好

  • 有没有一种方法来捕获400到599超文本传输协议状态在onFail()方法通过使用改造2.0?每当其他api返回400,401等,然后改型像200响应,并在on成功()上处理它。我怎样才能实现呢?

  • 如何将此Json响应转换为改装bean我得到了Gson错误,就像使用JsonReader一样。setLenient(true)在第1行第1列路径接受格式错误的JSON$ api调用为 字符串CATEGORY\u API=“”https://api.callingservice.com"; 请帮助我解决这个问题,如何将Json响应转换为Bean,我的Bean类如下