Android和Java的REST客户端改造不会终止

时间:2014-12-07 07:52:04

标签: java android rest retrofit

我正在研究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() + "<---");
            }
        };
    }
}

1 个答案:

答案 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();
  }
}