BaseUrl没有动态改变Dagger 2&改造

时间:2017-08-21 14:14:24

标签: android dependency-injection retrofit2 interceptor dagger-2

我试图动态更改Android应用的baseUrl,但网址没有更改。

我从这里开始引用 David 的答案,OkHttp方法Dagger + Retrofit dynamic URLSet dynamic base url using Retrofit 2.0 and Dagger 2,但仍然没有运气。

最初,该应用指向了网址" https://imd.com/yeddydemo/wpApp/",这是我们的应用基础网址。

在进行了一些谷歌搜索之后,我编写了以下代码,将应用程序基本网址更改为https://imd.com/rahudemo/wpApp/,但它无法正常工作:

任何人都可以指出我做错了什么。谢谢你提前:)

更改基本网址的方法:

  public void changeUrlConfiguration(String name){

 NetComponent netComponent = DaggerNetComponent.builder()
                .apiModule(new ApiModule("https://imd.com/rahudemo/wpApp/"))
                .appModule(new AppModule((ImdPoApp)homeActivity.getApplication()))
                .storageModule(new StorageModule((ImdPoApp)homeActivity.getApplication()))
                .build();

        ApiStories service = netComponent.retrofit().create(ApiStories.class);
        HostSelectionInterceptor interceptor = netComponent.interceptor();

        interceptor.setHost("https://imd.com/rahudemo/wpApp/","8WAtp8nUEOrzSu67t9tGITEo");

}

拦截器类

public final class HostSelectionInterceptor implements Interceptor {
    private volatile String host;
    private String authKey;

    public void setHost(String host,String authKey) {
        this.host = host;
        this.authKey=authKey;
        new ApiModule(host);
    }


    @Override public okhttp3.Response intercept(Chain chain) throws IOException {
        Request request = chain.request();
        String host = this.host;
        if (host != null) {
            HttpUrl newUrl = HttpUrl.parse(host);

            request = request.newBuilder()
                    .url(newUrl)
                    .build();
        }
        return chain.proceed(request);
    }

}

ApiModule

@Module
public class ApiModule {
    String mBaseUrl;
    HostSelectionInterceptor sInterceptor;
    public ApiModule(String mBaseUrl) {
        this.mBaseUrl = mBaseUrl;
    }

    @Provides
    @Singleton
    Cache provideHttpCache(Application application) {/*..*/}

    @Provides
    @Singleton
    Gson provideGson()  {/*..*/}

    @Provides
    @Singleton
    OkHttpClient provideOkhttpClient(Cache cache, HostSelectionInterceptor hostSelectionInterceptor) {
        OkHttpClient.Builder client = new OkHttpClient.Builder();
        client.addInterceptor(chain -> {
            Request request = chain.request();
            Request.Builder builder = request.newBuilder().addHeader("Authkey", "8WAtp8nUEOrzSu67t9tGITEo");
            return chain.proceed(builder.build());
        });

        client.addInterceptor(hostSelectionInterceptor);

        client.cache(cache);
        return client.build();
    }

    @Provides
    @Singleton
    HostSelectionInterceptor provideInterceptor() {
        if (sInterceptor == null) {
            sInterceptor = new HostSelectionInterceptor();
        }
        return sInterceptor;
    }


    @Provides
    @Singleton
    Retrofit provideRetrofit(OkHttpClient okHttpClient) {
        return new Retrofit.Builder()
                .addConverterFactory(GsonConverterFactory.create())
                .baseUrl(mBaseUrl)
                .client(okHttpClient)
                .build();
    }

}

2 个答案:

答案 0 :(得分:0)

在您的方法中,传递基本网址想要更改为newbaseurl

 public void changeUrlConfiguration(String name, String newbaseurl){
    NetComponent netComponent = DaggerNetComponent.builder()
                .apiModule(new ApiModule(newbaseurl))
                .appModule(new 
    AppModule((ImdPoApp)homeActivity.getApplication()))
                .storageModule(new StorageModule((ImdPoApp)homeActivity.getApplication()))
                .build();

         ApiStories service = netComponent.retrofit().create(A

piStories.class);
        HostSelectionInterceptor interceptor = netComponent.interceptor();

        interceptor.setHost(newbaseurl,"8WAtp8nUEOrzSu67t9tGITEo");

}

答案 1 :(得分:0)

通过改变我的拦截器& ChangeUrlConfiguration方法如下所示,我可以更改BaseUrl

拦截器方法

 @Override public okhttp3.Response intercept(Chain chain) throws IOException {

        Request request = chain.request();
        String host = this.host;
        if (host != null) {
            HttpUrl newUrl = request.url().newBuilder()
                    .removePathSegment(0).removePathSegment(0).removePathSegment(0).addPathSegments(host).addPathSegment("wpApp").addEncodedPathSegment("api.php")
                    .build();
            request = request.newBuilder()
                    .url(newUrl).addHeader("Authkey", "8WAtp8nU")
                    .build();
        } else {
            request = request.newBuilder().addHeader("Authkey", "8WAtp8nU")
                    .build();
        }
        try {
            return chain.proceed(request);
        } catch (IOException e) {
            e.printStackTrace();
        }

        return null;

    }

<强> changeUrlConfiguration

public void changeUrlConfiguration(String constituencyName){

String newbaseurl="https://imdstar.com/rahuldemo/wpApp/";
hostSelectionInterceptor.setHost(newbaseurl,"8WAtp8nUEOrzSu67t9tGITEzIdgr6huIpXqo");

}