如何检查改造请求调用是不是完成?

Posted

技术标签:

【中文标题】如何检查改造请求调用是不是完成?【英文标题】:How to check whether Retrofit request call is finished or not?如何检查改造请求调用是否完成? 【发布时间】:2018-06-02 14:34:43 【问题描述】:

如何确定我的请求调用是否被执行? 在 AsyncTask 中,我们只需检查 (mPlaceObj.getStatus().equals(AsyncTask.Status.FINISHED) 它返回一个布尔值。

另一方面,在改造中,我们使用方法 mCall.isExecuted() ,如果此调用已被 @linkplain #execute() 执行 或 @linkplain #enqueue(Callback) enqueued,则返回 true。

请问有什么方法可以解决吗?

【问题讨论】:

onRespone 回调。您也可以使用 isSuccessful 检查响应是否成功。 如果你是从另一个activity调用,那么你必须使用回调接口来检测调用是否已经结束。 你可以在这里发布你的改造代码,以便我可以编辑它 我只是想阻止多个请求 @Manish 好的,我认为回调对你有用 【参考方案1】:

您可以使用 HttpLoggingInterceptor 来检查 Retrofit 请求调用。

HttpLoggingInterceptor logging = new HttpLoggingInterceptor();
logging.setLevel(HttpLoggingInterceptor.Level.BODY);

OkHttpClient.Builder httpClient = new OkHttpClient.Builder().connectTimeout(60, TimeUnit.SECONDS)
                .writeTimeout(60, TimeUnit.SECONDS)
                .readTimeout(60, TimeUnit.SECONDS)
httpClient.addInterceptor(logging);

将此记录器与您的改造对象一起使用,如下所示:

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

您将在 Logcat Monitor 中获得请求调用的 Logcat。追踪它。

您将使用 Retrofit 获得两种状态,即 onResponse 和 onFailure。如果您的通话成功完成,那么您会在 onResponse 中找到您的通话,如果有异常,则在 onFailure 中找到您的通话。

请参阅此tutorial,您将获得有关改造及其功能的更多信息。

为 Logger 使用此依赖项:

编译'com.squareup.okhttp3:logging-interceptor:3.8.1'

【讨论】:

@Lucifer 是的。这对你没有帮助吗!!? 我担心的是,Retrofit 使用了自己的 Thread 机制,那么我们如何才能知道它是否成功完成了呢?【参考方案2】:

如果您想在完成改造调用后在另一个活动或另一个片段中执行某些任务,但您的活动已更改并且您仍在等待改造调用完成,您可以使用接口发送数据。

假设您有一个通过改造调用 API 的 Activity A,而此调用正在执行时,用户已移至另一个 Activtiy B,现在您需要在 Activity B 中调用一个方法(或执行其他操作)完成来自 A 的调用。

在A中创建一个接口AB,在Activity B中实现AB并覆盖其方法,并通过API调用的onResponse()方法中ActivityA中接口AB的对象调用该方法 .

【讨论】:

以上是关于如何检查改造请求调用是不是完成?的主要内容,如果未能解决你的问题,请参考以下文章

Rxjava,改造和多次调用

改造 - 是不是可以避免从应用程序拦截器调用实际 api 并返回硬编码响应?

如何测试 N 秒后是不是没有调用方法?

如何检查一个函数是不是被另一个函数调用?

使用 rxJava 和改造多次调用另一个请求中的请求

如何检查 java servlet 过滤器中的 OPTIONS 方法调用?