2016-08-18 29 views
0

私のアプリケーションでは、私のアプリケーションのために、ベースインターフェイスで Retrofitを使用しています。私は、改造ページのように、ベースURLを使用しています。 私はインターフェイスの外からbaseUrlを変更できるようにします。 Testingsのための1つのbaseUrlと開発のための1つのbaseUrlを持っていて、ユーザーはそれらを切り替えることができるでしょう。 Javaインターフェイス内のすべての変数は最終的なもので変更することはできません。 インターフェイスでは囲まれたインターフェイスの外部から変数を受け取ることができないため、 どのように変更するのですか?ここretrofitインターフェイスでbaseURLを変更するにはどうすればよいですか?

は私の改造インタフェースです:

String baseUrl = "http://1.1.1.1:1000/"; 

    //network calls 

    @GET("api/v1/alignment/measuring") 
    Call<AligmentDataPojo> getCallData(); 

    @GET("api/v1/alignment/best-position") 
    Call<BestPositionPojo> getBestPositionCallData(); 

    @GET("api/v1/data/resetBoxAligment") 
    Call<AligmentScanPojo> resetBoxAligmentCallData(); 

    @GET("api/v1/alignment/pointer-location") 
    Call<CurserLocationPojo> curserLocationCallData(); 

    @GET("api/v1/alignment/fineAlignment") 
    Call<FineAligmentPojo> fineAligmentCallData(); 

    @GET("api/v1/alignment/get-bands") 
    Call<GetBandsPojo> getAllBandsCallData(); 


    @POST("api/v1/alignment/set-band") 
    Call<PojoSetBand> postAligmentSetBand(@Body SetBandAligmentModel setBandAligmentModel); 

    @POST("api/v1/alignment/action/start") 
    Call<PojoSetBand> postAligmentAction(@Body AligmentActionPayloadModel aligmentActionPayloadModel); 


    @GET("api/v1/alignment/evaluation-results") //Just for mockuppurposeses we have unreal information that we send and simulate a return call 
    Call<EvaluationDataPojo> getEvaluationResults(); 

    @POST("api/v1/alignment/start-evaluation") //Just for mockuppurposeses we have unreal information that we send and simulate a return call 
    Call<PojoSetBand> startEvaluationPost(@Body AligmentActionPayloadModel aligmentActionPayloadModel); 


    //testings 
    @POST("api/v1/data/testPost") 
    Call<TestPostModel> getTestPost(@Body TestPostModel testPostModel); 


    //factory 
    class Factory { 
     private static RetrofitInterface service; 

     public static RetrofitInterface getInstance() { 
      if (service == null) { 
       Retrofit retrofit = new Retrofit.Builder() 
         .baseUrl(baseUrl) 
         .addConverterFactory(GsonConverterFactory.create()) 
         .build(); 

       service = retrofit.create(RetrofitInterface.class); 
       return service; 
      } else { 
       return service; 
      } 

     } 
    } 
+0

1 /他共有環境設定にそれを保存したり、URLを選んで、ベースURL 2 /ためのピッカーを作成... 3 /再インスタンス化改造するため P.S.でアプリを再起動します。あなたは、アプリケーションの再起動のために 'com.jakewharton:process-phoenix:1.0.2'をコンパイルすることができます。 – toshkinl

+0

おそらくこれは関連しています。 http://stackoverflow.com/questions/38805689/retrofit-change-baseurl –

+0

http://stackoverflow.com/questions/36960627/android-retrofit-design-patterns/36963162#36963162これを見て、セッターを作成してくださいベースURL。 – Amir

答えて

0

あなたはちょうどこのようなさまざまな改造インスタンスを作成することができます。

//Build retrofit instance 
Retrofit retrofit = new Retrofit.Builder() 
      .baseUrl(baseUrl).build(); 

次に、あなたのサービスをインスタンス化します。

apiService = retrofit.create(ApiService.class); 
0

簡単な答えは、各オブジェクトが一つだけベースURLを持つことができ、それらをシングルトンとして使用するように設計されているので、単に、2つのRetroFitオブジェクトを使用することです。ユーザーがそれらの間で切り替えると、その選択に対応するRetroFitインスタンスを使用します。

関連する問題