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

我正在研究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();
  }
}
上一篇:java – Retrofit不适用于特定版本的android


下一篇:php – 改进2在Postman和Localhost中工作但不在亚马逊AWS Live Server上工作