如何在改造界面中更改baseURL?

时间:2016-08-18 10:26:00

标签: java android retrofit

我正在使用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;
            }

        }
    }

2 个答案:

答案 0 :(得分:0)

简单的答案就是使用两个RetroFit个对象,因为每个对象只能有一个基本URL,并且它们被设计为用作单例。然后,当用户在它们之间切换时,只需使用与选择对应的RetroFit实例。

答案 1 :(得分:0)

您可以像这样创建一个不同的改造实例:

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

然后你实现了你的服务。

    apiService = retrofit.create(ApiService.class);