In my app I have to send many Images to server through Multipart Api, using Retrofit, Images like profile Image,Driving licence, Bank Pass Book Images, Cheque Image, and some other images. Now I am able to send the images if user select all the images, but it is not compulsory that user need to select all the images, It is completely user choice which image to upload.
So how to handle the situation where user not select image, as my app is crashing when user not select all the images,
From backend Images are not require field, but how do I handle from my end.
I have read somewhere that method overloading is one option, but there are many images, so I can't make this many methods.
Any other solution If any one have please help.
Here is my function:
private fun updateCustomerProfile(
cusId: String?,
uriAadhar: Uri?,
uriAadharBack: Uri?,
uriPan: Uri?,
uriPassBook: Uri?,
uriCheque: Uri?
) {
val customerId: String? = cusId
val customerBank: String = binding.tvBankNamePreview.text.toString()
val customerBankNumber: String = binding.tvAccountNumberPreview.text.toString()
val customerIfsc: String = binding.tvIfscCodePreview.text.toString()
val id = RequestBody.create(MediaType.parse("text/plain"), customerId)
val bankName = RequestBody.create(MediaType.parse("text/plain"), customerBank)
val bankAccountNumber =
RequestBody.create(MediaType.parse("text/plain"), customerBankNumber)
val ifsc = RequestBody.create(MediaType.parse("text/plain"), customerIfsc)
//Aadhaar card Image File
val aadharFile = FileUtil.getFileFromUri(this, uriAadhar!!)
val requestAadharFile =
RequestBody.create(MediaType.parse("multipart/form-data"), aadharFile)
val aadharImage =
MultipartBody.Part.createFormData("aadhar_card", aadharFile?.name, requestAadharFile)
//Aadhar card Back Image File
val aadharBackFile = FileUtil.getFileFromUri(this, uriAadharBack!!)
val requestAadharBackFile =
RequestBody.create(MediaType.parse("multipart/form-data"), aadharBackFile)
val aadharBackImage =
MultipartBody.Part.createFormData(
"aadharcard_back_image",
aadharBackFile?.name,
requestAadharBackFile
)
//Pan card Image file
val panFile = FileUtil.getFileFromUri(this, uriPan!!)
val requestPanFile = RequestBody.create(MediaType.parse("multipart/form-data"), panFile)
val panImage = MultipartBody.Part.createFormData("pan_card", panFile?.name, requestPanFile)
//Pass Book Image file
val passBookFile = FileUtil.getFileFromUri(this, uriPassBook!!)
val requestPassBookFile =
RequestBody.create(MediaType.parse("multipart/form-data"), passBookFile)
val passBookImage =
MultipartBody.Part.createFormData("passbook_image", passBookFile?.name, requestPassBookFile)
//Cheque Image file
val chequeFile = FileUtil.getFileFromUri(this, uriCheque!!)
val requestChequeFile =
RequestBody.create(MediaType.parse("multipart/form-data"), chequeFile)
val chequeImage =
MultipartBody.Part.createFormData("cheque_image", chequeFile?.name, requestChequeFile)
Log.d("ImageUtils",
"PreviewData: $id, $ifsc, $bankName, $bankAccountNumber, $aadharImage, $aadharBackImage, $panImage")
// api call
RetrofitInstance.apiInterface.updateCustomerDocument(
id,
bankName,
bankAccountNumber,
ifsc,
aadharImage,
aadharBackImage,
panImage,
passBookImage,
chequeImage
).enqueue(object : Callback<AdminUpdateCustomerKycResponseData?> {
override fun onResponse(
call: Call<AdminUpdateCustomerKycResponseData?>,
response: Response<AdminUpdateCustomerKycResponseData?>
) {
if (response.isSuccessful) {
mProgress.dismiss()
val updateResponse: AdminUpdateCustomerKycResponseData = response.body()!!
val message: String = updateResponse.message
//val message:String = "Customer Documents Updated Successfully!!"
MotionToast.createToast(
this@PreviewCustomerFormActivity,
"Success",
"$message",
MotionToastStyle.SUCCESS,
MotionToast.GRAVITY_BOTTOM,
MotionToast.LONG_DURATION,
ResourcesCompat.getFont(
this@PreviewCustomerFormActivity,
R.font.merriweather_bold
)
)
finish()
} else {
mProgress.dismiss()
Log.d("Api Response", "Response Not success: ${response.code()}")
Toast.makeText(
this@PreviewCustomerFormActivity,
"Response not success: ${response.code()}",
Toast.LENGTH_SHORT
).show()
}
}
override fun onFailure(call: Call<AdminUpdateCustomerKycResponseData?>, t: Throwable) {
mProgress.dismiss()
Log.d("Api Response", "Response Error: ${t.localizedMessage}")
Toast.makeText(
this@PreviewCustomerFormActivity,
"Response Error: ${t.localizedMessage}",
Toast.LENGTH_SHORT
).show()
}
})
}
My Interface Method:
@Multipart
@POST("admin_update_customerkyc")
fun updateCustomerDocument(
@Part("id") id: RequestBody,
@Part("bank_name") bankName: RequestBody,
@Part("account_no") accountNo: RequestBody,
@Part("ifsc") ifsc: RequestBody,
@Part aadharCard: MultipartBody.Part,
@Part aadharCardBack: MultipartBody.Part,
@Part panCard: MultipartBody.Part,
@Part passBook:MultipartBody.Part,
@Part cheque:MultipartBody.Part
): Call<AdminUpdateCustomerKycResponseData>