1

how can pass api parameter in body instead @Query tag android kotlin retrofit

i want pass parameter in body instead api @Query

my api interface

@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
):Response<PassportInsertApiClass>

repository class

 suspend fun addPassport(image: MultipartBody.Part?, userid: String,fistname:String,surname:String,nationality:String,
                       gender:String, dof:String,age:String,sig:String,salt:String):Response<PassportInsertApiClass>{
    return RetrofitInstance.api.addPassport(image, userid,fistname,surname,nationality,gender,dof,age,sig,salt)
}

View model

fun addPassport(image: MultipartBody.Part?, userid: String,fistname:String,surname:String,nationality:String,
                dof:String,gender:String,age:String,sig:String,salt:String):
        MutableLiveData<Response<PassportInsertApiClass>>{
    val addPassport = MutableLiveData<Response<PassportInsertApiClass>>()
    viewModelScope.launch {
        addPassport.postValue(repository.addPassport(image, userid, fistname, surname, nationality, dof, gender, age, sig, salt))
    }
    return addPassport
}

fragment/activity

settingViewModel.addPassport(body,userId,fistname,surname,nationality,dof,gender,age,sig1,salt1).observe(this, { response ->
                    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
                })
ANDROID
  • 54
  • 12
androi useru
  • 81
  • 10

1 Answers1

0

you can not pass whole data class as @body in Multipart type api call you can use it like it

    @Multipart
    @POST("v1/society")
    fun createSociety(
     @Header("Authorization") authorization: String?,
     @Part profile_photo: MultipartBody.Part?,
     @Part("name") name: RequestBody
     ): Call<EntrepreneurialSocietyCreatedResponse>

This is how you can pass data as Body and before passing name in Api you have to convert it into ReqeustBody like this

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

Ehsan Ullah
  • 144
  • 3