Con Retrofit 2, puede establecer una URL completa en la anotación de un método de servicio como:
public interface APIService {
@GET("http://api.mysite.com/user/list")
Call<Users> getUsers();
}
Sin embargo, en mi aplicación, la URL de mis servicios web no se conoce en el momento de la compilación, la aplicación los recupera en un archivo descargado, así que me pregunto cómo puedo usar Retrofit 2 con una URL dinámica completa.
Traté de establecer un camino completo como:
public interface APIService {
@GET("{fullUrl}")
Call<Users> getUsers(@Path("fullUrl") fullUrl);
}
new Retrofit.Builder()
.baseUrl("http://api.mysite.com/")
.build()
.create(APIService.class)
.getUsers("http://api.mysite.com/user/list"); // this url should be dynamic
.execute();
Pero aquí, Retrofit no ve que la ruta es en realidad una URL completa y está intentando descargar http://api.mysite.com/http%3A%2F%2Fapi.mysite.com%2Fuser%2Flist
¿Alguna pista de cómo podría usar Retrofit con una URL tan dinámica?
Gracias
Respuestas:
Creo que lo estás usando de manera incorrecta. Aquí hay un extracto del registro de cambios :
Entonces su interfaz debería ser así:
fuente
Quería reemplazar solo una parte de la url, y con esta solución, no tengo que pasar toda la url, solo la parte dinámica:
fuente
Puede usar la bandera codificada en la
@Path
anotación:/
con%2F
.?
reemplace%3F
, por lo que aún no puede pasar cadenas de consulta dinámicas.fuente
A partir de Retrofit 2.0.0-beta2, si tiene un servicio que responde JSON desde esta URL: http: // myhost / mypath
Lo siguiente no funciona:
Pero esto está bien:
fuente
Puedes usar esto:
Para obtener más información, consulte la documentación https://square.github.io/retrofit/
fuente
Paso 1
Paso-2 Para una mejor práctica, defina una clase para la instancia de actualización: -
} Paso-3 define en tu actividad: -
fuente
La biblioteca RetrofitHelper escrita en kotlin, le permitirá hacer llamadas API, usando unas pocas líneas de código y puede usar diferentes URL, encabezados y parámetros , en cada llamada.
Agregue varias URL en su clase de aplicación de esta manera:
Y luego use la URL que necesita en su llamada:
Para más información ver la documentación
fuente
URL dinámica con método Get y Post en Retrofit (MVVM)
Interfaz de servicio de actualización:
Clase de servicio MVVM:
y la clase de cliente de modificación
por ejemplo, esta es la URL: https://gethelp.wildapricot.com/en/articles/549-changing-your
baseURL: https://gethelp.wildapricot.com
Restante @Url: / es / articles / 549-changing-your (que es pasar en clase de servicio retro)
fuente
fuente
Si ya tiene su configuración de código y no desea realizar cambios en las diferentes interfaces que puede, use la solución descrita en este enlace . El punto principal es el método
changeApiBaseUrl
que actualiza la URL y recrea el constructor Retrofit.Puede usarlo de la siguiente manera:
fuente