#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 это зависит от реализации вашего Api4. 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