2014-12-07 18 views
1

我正在研究Android和Java的改裝REST客戶端。改裝用於Android和Java的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() + "<---"); 
      } 
     }; 
    } 
} 

回答

8

默認情況下,Retrofit使用60s核心池超時的非後臺線程池。非常,你很少想要以這種方式使用Retrofit的異步Callback行爲。

如果您只是測試,您可以撥打電話setExecutorsRestAdapter.Builder並傳遞一個同步執行程序作爲第一個參數和第二個null。這將允許您使用異步API,但在測試中獲得同步行爲。

和同步執行,如果你不知道如何使一個:

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