I'm upload file with other details in retrofit but in success response i got status 0 because of file is sent in bytearray.
Below is my code:
MyAPI class : interface and retrofit instance
@Multipart
@POST("edit_userinfo")
@Headers(## Heading ##
"Content-Type: multipart/form-data",
"Accept: */*"
)
fun editProfile(
@Part("languges") lang: RequestBody,
@Part("user_id") userId: RequestBody,
@Part("name") name: RequestBody,
@Part("gender") gender: RequestBody,
@Part("keyword") keyword: RequestBody,
@Part("mobile") mobile: RequestBody,
@Part image: MultipartBody.Part
): Call<UploadResponse>
return Retrofit.Builder()
.baseUrl("http://phpstack-916737-3182297.cloudwaysapps.com/")
.client(client)
.addConverterFactory(GsonConverterFactory.create())
.build()
.create(MyAPI::class.java)
MainActivity : api calling
var lang = "English".toRequestBody("text/plain".toMediaTypeOrNull())
var userId = Reques`your text`tBody.create("text/plain".toMediaTypeOrNull(), "1")
var name = RequestBody.create("text/plain".toMediaTypeOrNull(), "Test12")
var gender = RequestBody.create("text/plain".toMediaTypeOrNull(), "male")
var mobno = RequestBody.create("text/plain".toMediaTypeOrNull(), "1212121212")
var keyword = RequestBody.create("text/plain".toMediaTypeOrNull(),"**********")
var image = MultipartBody.Part.createFormData(
"photo",
file.name,
RequestBody.create("image/*".toMediaTypeOrNull(), file)
)
var apiCall = MyAPI().editProfile(
lang, userId, name, gender, keyword, mobno,image
)
apiCall.enqueue(object : Callback<UploadResponse> {
override fun onFailure(call: Call<UploadResponse>, t: Throwable) {
Log.e("TAG", "onFailure: $t")
t.printStackTrace()
layout_root.snackbar(t.message!!)
}
override fun onResponse(
call: Call<UploadResponse>,
response: Response<UploadResponse>
) {
response.body()?.let {
Log.e("TAG", "onResponse: sucess $it")
layout_root.snackbar("Status -> $it")
}
}
})
this api is working in postman.
photo : file(filetype)
So how can i pass file in retrofit api.
Thanks in advance
Pass body in retrofit service like this:
@POST("/edit_userinfo")
@Headers("Accept: application/json")
fun editUserInfo2(@Body body: RequestBody): Call<EditUserInfoResp>
Call api service and pass requestbody as below:
val requestBody: RequestBody = MultipartBody.Builder()
.setType(MultipartBody.FORM)
.addFormDataPart("userId", "your_user_id")
.addFormDataPart("name", "name")
.addFormDataPart(
"photo",
photoFile.name,
RequestBody.create("image/*".toMediaTypeOrNull(), photoFile)
)
.build()
var apiCall = retrofitServices.editUserInfo(requestBody)
I hope this will work