我正在研究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() + "<---");
}
};
}
}
答案 0 :(得分:8)
默认情况下,Retrofit使用具有60秒核心池超时的非守护程序线程池。很少,你很想以这种方式使用Retrofit的异步Callback
行为。
如果您只是在测试,可以在setExecutors
上调用RestAdapter.Builder
并将同步执行程序作为第一个参数传递,并将null
传递给第二个参数。这将允许您使用异步API,但在测试中获得同步行为。
同步执行者,如果你不知道如何制作一个:
public final class SynchronousExecutor implements Executor {
@Override public void execute(Runnable r) {
r.run();
}
}