How to handle the not require image in Multipart Retrofit Api?

16 Views Asked by At

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>


0

There are 0 best solutions below