我正在研究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的异步回调行为.
如果您只是测试,可以在RestAdapter.Builder上调用setExecutors并将同步执行程序作为第一个参数传递,并将第二个参数传递给null.这将允许您使用异步API,但在测试中获得同步行为.
和同步执行程序,如果你不知道如何制作一个:
public final class SynchronousExecutor implements Executor {
@Override public void execute(Runnable r) {
r.run();
}
}