Как передавать данные в URL без запроса при модернизации

#android #kotlin #mvvm #retrofit

#Android #kotlin #mvvm #модернизация

Вопрос:

Я использую модернизацию для вызовов API.. Мой API выглядит так https://test/update/123456789 ..

В этом API необходимо передать «123456789» в качестве значения.. Кто-нибудь может помочь мне сделать это с помощью модернизации.. Как я могу передать это значение без запроса..

Заранее спасибо ..:)

 fun updatePriceTesting(@Query("device_id") deviceId: String, @Query("appId") appId: String, @Body RequestBody: RequestBody) : Deferred
  

Ответ>

Комментарии:

1. @GET("/test/update/:id) fun whatever(@Path("id") id: Int) — см. Раздел «Манипулирование URL» в документах по модернизации .

2. @CommonsWare хорошо, дайте мне когда-нибудь, я попробую

3. Это будет что-то вроде этого @GET("/yourUpdatePathThatWillBeAppendedToBaseUrl/{id}) fun update(@Path("id") id: Int) , также ваш тип запроса может быть @POST или @PUT это зависит от реализации вашего Api

4. java.lang.NumberFormatException: для входной строки: «589656966» получил это исключение

5. @CommonsWare java.lang. Исключение IllegalArgumentException: URL не содержит «{id}». (параметр # 1)

Ответ №1:

Чтобы передать значение в retrofit, вы должны аннотировать его как @Query или @Path, если вы не хотите использовать @Query, вы можете использовать @Path в параметре метода, например: если вы хотите отправить значение в свой api, скажем www.fb.com/post ,чтобы пройтиидентификатор сообщения для извлечения, мы должны сделать это так:

 @Get("www.fb.com/post/{post_id}")
  

если ваш идентификатор является int, вы можете использовать :

 Call<Post> getPost( @Path("post_id") int postId);
  

но если бы это была строка :

 Call<Post> getPost( @Path("post_id") String postId);
  

и затем вы можете вызвать этот метод :

 yourApiServiceObj.getPost(thePostId);
  

Комментарии:

1. Попробовал это, но получил ошибку, подобную этой «java.lang. Исключение IllegalArgumentException: URL не содержит «{id}». (параметр # 1)

2. в вашем RequestBody или любом другом вашем URL-адресе просто введите {id} вместо 123456789

3. когда я использую такой идентификатор, это означает, что он выдает ошибку java.lang. Исключение IllegalArgumentException: URL не содержит «{id}». (параметр # 1)

Ответ №2:

Поскольку кажется, что это непонятно, я напишу это как ответ

если ваш URL-адрес будет таким update/123456789?appId=5452266 , update/device_id?appId=5452266 то ваш вызов функции будет

 @FormUrlEncoded
@POST("update/{device_id}")
fun updatePriceTesting(@Path("device_id") deviceId: String, @Field("appId") appId: String, @Body RequestBody: RequestBody) : Deferred
  

если ваш URL-адрес будет таким update/5452266?device_id=123456789 , update/appId?device_id=123456789 то ваш вызов функции будет

 @FormUrlEncoded
@POST("update/{appId}")
fun updatePriceTesting(@Field("device_id") deviceId: String, @Path("appId") appId: String, @Body RequestBody: RequestBody) : Deferred
  

если ваш URL-адрес будет таким update/123456789/5452266 , update/device_id/appId то ваш вызов функции будет

 @FormUrlEncoded
@POST("update/{device_id}/{appId}")
fun updatePriceTesting(@Path("device_id") deviceId: String, @Path("appId") appId: String, @Body RequestBody: RequestBody) : Deferred