我正在使用Retrofit,对于我的应用, 在基本界面中,我使用基本URL,如改装页面建议的那样, 我希望能够从界面外部更改baseUrl, 所以要有一个baseUrl用于测试,一个baseUrl用于开发,用户可以在它们之间切换。 在java接口中,所有变量都是final,无法更改,并且 由于接口不能从封闭接口外部获取变量, 我如何在改造中改变它?
这是我的改造界面:
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 :(得分:0)
简单的答案就是使用两个RetroFit
个对象,因为每个对象只能有一个基本URL,并且它们被设计为用作单例。然后,当用户在它们之间切换时,只需使用与选择对应的RetroFit
实例。
答案 1 :(得分:0)
您可以像这样创建一个不同的改造实例:
//Build retrofit instance
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(baseUrl).build();
然后你实现了你的服务。
apiService = retrofit.create(ApiService.class);