Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


Rutas dinámicas en la adaptación

Estoy intentando acceder a un recurso con como http://192.168.1.64:5050/api/{api_key}/updater.info .

¿Cómo establecería dinámicamente el parámetro api_key ? He intentado usar un RequestInterceptor sin éxito donde la url de base es http://192.168.1.64:5050/api/{api_key} .

 @Override public void intercept(RequestFacade request) { request.addPathParam("api_key", apiKey); } 

¿Hay otras alternativas?

  • No se puede crear un conversor para mi clase en Android Retrofit2 converter-simplexml library
  • Descargar vídeo de Url con Retrofit
  • Convertidor de gson retrofit para json anidado con diferentes objetos
  • Obtención de información de encabezado con RXJava y Retrofit
  • Actualizaciones de Android Retrofit 2.0
  • Android: pasar dinámicamente la clase del modelo a retroalimentar la devolución de llamada
  • Adaptar la matriz de objetos a GSON Error
  • Manejar Error de red con Retrofit observable
  • 3 Solutions collect form web for “Rutas dinámicas en la adaptación”

    El reemplazo de ruta no ocurre dentro de la URL base del punto final de la API, solo la cadena URL relativa en el método. Voy a suponer que no desea prefijar las URL relativas en cada una de sus declaraciones de método de interfaz.

    Aunque está mal redactado, el javadoc de Endpoint dice:

    Los llamantes siempre deben consultar la instancia de los valores más recientes en lugar de almacenar en caché los valores devueltos.

    Esto significa que para cada solicitud se consultará la instancia de Endpoint para el valor de la URL de base.

    Puede proporcionar una implementación personalizada de Endpoint en la que puede cambiar el valor de la clave API:

     public final class FooEndpoint implements Endpoint { private static final String BASE = "http://192.168.1.64:5050/api/"; private String url; public void setApiKey(String apiKey) { url = BASE + apiKey; } @Override public String getName() { return "default"; } @Override public String getUrl() { if (url == null) throw new IllegalStateException("API key not set."); return url; } } 

    Utilizar esta:

     @PUT("/path1/path2/{userId}") void getSomething( @Path("userId") String userId ); 

    Y se llama al método como este:

     String userId = "1234"; service.getSomething(userId); 

    Si el parámetro path no está en la misma posición en la url de cada solicitud, por ejemplo, http://endpoint/blah/{apiKey} y http://endpoint/blah/blah/{apiKey}/blah , podría Haz lo siguiente.

    En su interfaz APIService

      @GET(/blah/{apiKey}) void getFoo(Callback<Object> callback); @GET(/blah/blah/{apiKey}/blah) void getFooBlah(Callback<Object> callback); 

    A continuación, en su clase ApiClient crear un RequestInterceptor

     private static APIService sAuthorizedApiService; private static Gson gson; static { gson = new GsonBuilder().setPrettyPrinting() .create(); } public static synchronized APIService getApiClient(final Context context) { if (sAuthorizedApiService == null) { RequestInterceptor requestInterceptor = new RequestInterceptor() { @Override public void intercept(RequestFacade request) { request.addPathParam("apiKey", DataProvider.getInstance(context).getApiKey(); } }; RestAdapter restAdapter = new RestAdapter.Builder().setLogLevel(RestAdapter.LogLevel.FULL) .setClient(new OkClient(new OkHttpClient())) .setEndpoint("http://endpoint") .setRequestInterceptor(requestInterceptor) .setConverter(new GsonConverter(gson)) .build(); sAuthorizedApiService = restAdapter.create(GMAuthorizedApiService.class); } return sAuthorizedApiService; } 
    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.