Necesito cambiar la base de URL en la actualización, estoy usando koin para crear un módulo de actualización en el inicio de la aplicación y quiero cambiar esta URL en tiempo de ejecución.
Ya intenté cambiar baseUrl(" http://192.168.192.168/ ") a baseUrl("http://") y cambiar la URL en la llamada de actualización, pero mi aplicación falla y devuelve un error de URL ilegal.
Esta es mi diversión para crear el constructor.
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() }crear un bean a mi módulo
val retrofitModule: Module = applicationContext { bean { createRetrofit(get()) } }y comienza el koin:
startKoin(application = this, modules = listOf(retrofitModule, ...) )alguien me puede ayudar con esto?
Ya intenté cambiar baseUrl(" http://192.168.192.168/ ") a baseUrl("http://") y cambiar la URL en la llamada de actualización, pero mi aplicación falla y devuelve un error de URL ilegal.
Puede dejarlo como baseUrl si usa @URL , sobrescribirá el que está en su Retrofit.Builder()
Puede usar el parámetro @URL para cambiar el punto final dinámicamente.
@GET fun getUsers(@Url String url) : Observable<UserResponse>debe agregar estas líneas en su código:
Primer paso: agregue el nuevo CallAdapter RxJavaCallAdapterFactory.create() al crear una instancia de Retrofit.
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; }Siguiente paso: actualice el APIService, por ejemplo: -> método savePost(String title, String body, String userId) para convertirse en un 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); }Paso final: al realizar las solicitudes, nuestro suscriptor anónimo responde a la transmisión del observable que emite el evento.
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()); } }); }esta es la forma en que crea sus URL dinámicas: desea obtener más detalles enlace de descripción completa: Envío de datos con el cliente HTTP Retrofit 2 para Android
y Consulte la URL base para obtener detalles sobre cómo se resolverá el valor con una URL base para crear la URL de punto final completa.
si está usando kotlin: siga este enlace. URL dinámicas en tiempo de ejecución con Retrofit 2