как передать параметр api в теле вместо тега @Query для модернизации android kotlin

#android #api #kotlin #retrofit2 #viewmodel

#Android #API #котлин #модернизация 2 #модель представления

Вопрос:

как передать параметр api в теле вместо тега @Query для модернизации android kotlin

я хочу передать параметр в теле вместо api @Query

мой интерфейс api

 @Multipart  @POST("add_passport.php")  suspend fun addPassport(  @Part image: MultipartBody.Part?,  @Query("userid") userid: String,  @Query("fistname") fistname: String,  @Query("surname") surname: String,  @Query("nationality") nationality: String,  @Query("dof") dof: String,  @Query("gender") gender: String,  @Query("age") age: String,  @Query("sig") sig: String,  @Query("salt") salt: String ):Responselt;PassportInsertApiClassgt;  

класс репозитория

 suspend fun addPassport(image: MultipartBody.Part?, userid: String,fistname:String,surname:String,nationality:String,  gender:String, dof:String,age:String,sig:String,salt:String):Responselt;PassportInsertApiClassgt;{  return RetrofitInstance.api.addPassport(image, userid,fistname,surname,nationality,gender,dof,age,sig,salt) }  

Модель представления

 fun addPassport(image: MultipartBody.Part?, userid: String,fistname:String,surname:String,nationality:String,  dof:String,gender:String,age:String,sig:String,salt:String):  MutableLiveDatalt;Responselt;PassportInsertApiClassgt;gt;{  val addPassport = MutableLiveDatalt;Responselt;PassportInsertApiClassgt;gt;()  viewModelScope.launch {  addPassport.postValue(repository.addPassport(image, userid, fistname, surname, nationality, dof, gender, age, sig, salt))  }  return addPassport }  

фрагмент/действие

 settingViewModel.addPassport(body,userId,fistname,surname,nationality,dof,gender,age,sig1,salt1).observe(this, { response -gt;  if (response.isSuccessful){  if (response.body()?.status == 1 ){  Toast.makeText(context, "passport update", Toast.LENGTH_SHORT).show()  }  else {  Toast.makeText(context, "something went wrong", Toast.LENGTH_SHORT).show()  }  }  binding.progress.isVisible = false  })  

Ответ №1:

вы не можете передать весь класс данных как @body в вызове api составного типа, вы можете использовать его как это

 @Multipart  @POST("v1/society")  fun createSociety(  @Header("Authorization") authorization: String?,  @Part profile_photo: MultipartBody.Part?,  @Part("name") name: RequestBody  ): Calllt;EntrepreneurialSocietyCreatedResponsegt;   

Вот как вы можете передавать данные в виде тела, и перед передачей имени в Api вы должны преобразовать его в ReqeustBody, как это

 societyName.toRequestBody("text/plain".toMediaTypeOrNull())