我如何在运行时更改改造 URL
How i change the retrofit URL at runtime
我需要在改造中更改 URL 基础,我正在使用 koin 在应用程序启动时创建一个改造模块,我想在运行时更改此 url。
我已经尝试将 baseUrl("http://192.168.192.168/") 更改为 baseUrl("http://") 并在改造调用中更改 url 但我的应用程序崩溃并且 return非法 URL 错误。
这是我创建构建器的乐趣
fun createRetrofit(okHttpClient: OkHttpClient): Retrofit {
return Retrofit.Builder()
.baseUrl("http://192.168.192.168/")//i need change this at runtime
.client(okHttpClient)
.addConverterFactory(GsonConverterFactory.create()) .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.build()
}
为我的模块创建一个 bean
val retrofitModule: Module = applicationContext {
bean { createRetrofit(get()) }
}
开始对弈:
startKoin(application = this,
modules = listOf(retrofitModule, ...)
)
谁能帮我解决这个问题?
I already tried change the baseUrl("http://192.168.192.168/") to baseUrl("http://")and change the url on retrofit call but my app crashs and return illegal URL error.
如果您使用 @URL
,您可以将其保留为 baseUrl
,它会覆盖您的 Retrofit.Builder()
您可以使用 @URL
参数动态更改端点。
@GET
fun getUsers(@Url String url) : Observable<UserResponse>
您必须在代码中添加这些行:
第一步:
在构建 Retrofit 实例时添加新的 CallAdapter RxJavaCallAdapterFactory.create()。
public static final String BASE_URL = "http://google.com/";
public static Retrofit getClient(String baseUrl) {
if (retrofit==null) {
retrofit = new Retrofit.Builder()
.baseUrl(baseUrl)
.addCallAdapterFactory(RxJavaCallAdapterFactory.create())
.addConverterFactory(GsonConverterFactory.create())
.build();
}
return retrofit;
}
下一步:
更新 APIService 例如:-> savePost(String title, String body, String userId) 方法成为一个 Observable。
public interface APIService {
@GET
Call<ResponseBody> list(@Url String url);
//or
@POST("/posts")
@FormUrlEncoded
Observable<Post> savePost(@Field("title") String title,
@Field("body") String body,
@Field("userId") long userId);
}
最后一步:
发出请求时,我们的匿名订阅者响应发出事件的可观察流。
public void sendPost(String title, String body) {
// RxJava
mAPIService.savePost(title, body, 1).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread())
.subscribe(new Subscriber<Post>() {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
}
@Override
public void onNext(Post post) {
showResponse(post.toString());
}
});
}
这是您构建动态网址的方式:想要了解更多详细信息完整描述link:Sending Data With Retrofit 2 HTTP Client for Android
并参阅 base URL 了解如何根据基础 URL 解析该值以创建完整端点 URL。
如果您正在使用 kotlin:请遵循此 link。 dynamic urls at Runtime with Retrofit 2
我需要在改造中更改 URL 基础,我正在使用 koin 在应用程序启动时创建一个改造模块,我想在运行时更改此 url。
我已经尝试将 baseUrl("http://192.168.192.168/") 更改为 baseUrl("http://") 并在改造调用中更改 url 但我的应用程序崩溃并且 return非法 URL 错误。
这是我创建构建器的乐趣
fun createRetrofit(okHttpClient: OkHttpClient): Retrofit {
return Retrofit.Builder()
.baseUrl("http://192.168.192.168/")//i need change this at runtime
.client(okHttpClient)
.addConverterFactory(GsonConverterFactory.create()) .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.build()
}
为我的模块创建一个 bean
val retrofitModule: Module = applicationContext {
bean { createRetrofit(get()) }
}
开始对弈:
startKoin(application = this,
modules = listOf(retrofitModule, ...)
)
谁能帮我解决这个问题?
I already tried change the baseUrl("http://192.168.192.168/") to baseUrl("http://")and change the url on retrofit call but my app crashs and return illegal URL error.
如果您使用 @URL
,您可以将其保留为 baseUrl
,它会覆盖您的 Retrofit.Builder()
您可以使用 @URL
参数动态更改端点。
@GET
fun getUsers(@Url String url) : Observable<UserResponse>
您必须在代码中添加这些行:
第一步: 在构建 Retrofit 实例时添加新的 CallAdapter RxJavaCallAdapterFactory.create()。
public static final String BASE_URL = "http://google.com/";
public static Retrofit getClient(String baseUrl) {
if (retrofit==null) {
retrofit = new Retrofit.Builder()
.baseUrl(baseUrl)
.addCallAdapterFactory(RxJavaCallAdapterFactory.create())
.addConverterFactory(GsonConverterFactory.create())
.build();
}
return retrofit;
}
下一步: 更新 APIService 例如:-> savePost(String title, String body, String userId) 方法成为一个 Observable。
public interface APIService {
@GET
Call<ResponseBody> list(@Url String url);
//or
@POST("/posts")
@FormUrlEncoded
Observable<Post> savePost(@Field("title") String title,
@Field("body") String body,
@Field("userId") long userId);
}
最后一步: 发出请求时,我们的匿名订阅者响应发出事件的可观察流。
public void sendPost(String title, String body) {
// RxJava
mAPIService.savePost(title, body, 1).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread())
.subscribe(new Subscriber<Post>() {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
}
@Override
public void onNext(Post post) {
showResponse(post.toString());
}
});
}
这是您构建动态网址的方式:想要了解更多详细信息完整描述link:Sending Data With Retrofit 2 HTTP Client for Android
并参阅 base URL 了解如何根据基础 URL 解析该值以创建完整端点 URL。
如果您正在使用 kotlin:请遵循此 link。 dynamic urls at Runtime with Retrofit 2