#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())