gpt4 book ai didi

java - 适用于 Android 和 Java 的 Retrofit REST 客户端不会终止

转载 作者:太空宇宙 更新时间:2023-11-04 12:24:03 25 4
gpt4 key购买 nike

我正在研究适用于 Android 和 Java 的 Retrofit REST 客户端。

在 Eclipse 中使用标准 Java 项目,我使用带有 void 返回类型的 @POST。

进行异步调用。

一切都按预期工作,但是我的测试主方法永远不会终止。我必须手动停止每个测试执行。

我需要做什么(或停止做什么)才能让我的测试自动终止?

这是我的java代码。

import retrofit.Callback;
import retrofit.RestAdapter;
import retrofit.RetrofitError;
import retrofit.client.Response;

public class Android {

private static final RestAdapter mRestAdapter =
new RestAdapter.Builder()
.setEndpoint("http://localhost:8080/resources/registrations")
.build();

public static void main(final String... args) {

final AndroidRegister androidRegister =
mRestAdapter.create(AndroidRegister.class);

Callback<Void> callback = manufactureCallback();

androidRegister.androidRegisterInterface(
new RegistrationIdJson("1111-2222-3333-4444"), callback);
}

private static Callback<Void> manufactureCallback() {
return new Callback<Void>() {

@Override
public void failure(final RetrofitError retrofitError) {
System.out.println("retrofitError-->"
+ retrofitError.getLocalizedMessage() + "<---");
}

@Override
public void success(final Void returning,
final Response response) {
System.out.println("-->" + returning + "<--->"
+ response.getStatus() + "<---");
}
};
}
}

最佳答案

默认情况下,Retrofit 使用非守护线程池,核心池超时时间为 60 秒。您很少想以这种方式使用 Retrofit 的异步Callback 行为。

如果您只是进行测试,则可以在 RestAdapter.Builder 上调用 setExecutors 并将同步执行器作为第一个参数传递,将 null 作为第二个参数传递。这将允许您使用异步 API,但在测试中获得同步行为。

还有一个同步执行器,如果您不知道如何制作一个:

public final class SynchronousExecutor implements Executor {
@Override public void execute(Runnable r) {
r.run();
}
}

关于java - 适用于 Android 和 Java 的 Retrofit REST 客户端不会终止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38546485/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com