From 8aa43558bd994218383baa286885a1fb7617c3f9 Mon Sep 17 00:00:00 2001 From: Hemant Khadase Date: Wed, 21 Dec 2022 17:48:28 +0530 Subject: [PATCH] error handling in retrofit --- app/src/main/AndroidManifest.xml | 1 + .../bajajfd/interfaces/ApiInterface.kt | 2 +- .../ui/activity/BajajFdMainActivity.kt | 29 +++---- .../ui/fragment/StepOneBajajFDFragment.kt | 83 +++++++++++++++---- .../providerfactory/FDModelProviderFactory.kt | 15 ++++ .../GetRatesModelProviderFactory.kt | 1 + .../bajajfd/viewModel/BajajFDViewModel.kt | 1 - .../viewModel/StepOneBajajFDViewModel.kt | 7 ++ 8 files changed, 105 insertions(+), 34 deletions(-) create mode 100644 app/src/main/java/com/nivesh/production/bajajfd/ui/providerfactory/FDModelProviderFactory.kt diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 1a75794..7a1d06e 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -3,6 +3,7 @@ xmlns:tools="http://schemas.android.com/tools"> + @POST("GetCodes") - @Headers("token: 636F8F63-06C4-4D95-8562-392B34025FB0") + @Headers({"token: 636F8F63-06C4-4D95-8562-392B34025FB0"; "Content-Type: multipart/form-data"; "Accept: application/json" }.toString()) suspend fun getCodes(@Body requestBody: GetCodeRequest): Response } \ No newline at end of file diff --git a/app/src/main/java/com/nivesh/production/bajajfd/ui/activity/BajajFdMainActivity.kt b/app/src/main/java/com/nivesh/production/bajajfd/ui/activity/BajajFdMainActivity.kt index 1fb6e93..ef7dbba 100644 --- a/app/src/main/java/com/nivesh/production/bajajfd/ui/activity/BajajFdMainActivity.kt +++ b/app/src/main/java/com/nivesh/production/bajajfd/ui/activity/BajajFdMainActivity.kt @@ -15,8 +15,10 @@ import com.nivesh.production.bajajfd.databinding.ActivityBajajFdBinding import com.nivesh.production.bajajfd.interfaces.BajajFDInterface import com.nivesh.production.bajajfd.model.GetCodeRequest import com.nivesh.production.bajajfd.model.GetCodeResponse +import com.nivesh.production.bajajfd.model.GetCodes import com.nivesh.production.bajajfd.repositories.MainRepository import com.nivesh.production.bajajfd.ui.fragment.* +import com.nivesh.production.bajajfd.ui.providerfactory.FDModelProviderFactory import com.nivesh.production.bajajfd.ui.providerfactory.GetRatesModelProviderFactory import com.nivesh.production.bajajfd.util.Colors import com.nivesh.production.bajajfd.util.Resource @@ -28,6 +30,7 @@ class BajajFdMainActivity : AppCompatActivity(), BajajFDInterface { lateinit var stepOneBajajFDViewModel: StepOneBajajFDViewModel lateinit var viewModel: BajajFDViewModel + lateinit var listOfFrequency : List override fun onCreate(savedInstanceState: Bundle?) { @@ -41,22 +44,20 @@ class BajajFdMainActivity : AppCompatActivity(), BajajFDInterface { setContentView(binding.root) //start Repository - val viewModelProviderFactory = - GetRatesModelProviderFactory(MainRepository(ApiClient.getApiClient)) - stepOneBajajFDViewModel = - ViewModelProvider(this, viewModelProviderFactory)[StepOneBajajFDViewModel::class.java] + val viewModelProviderFactory = GetRatesModelProviderFactory(MainRepository(ApiClient.getApiClient)) + stepOneBajajFDViewModel = ViewModelProvider(this, viewModelProviderFactory)[StepOneBajajFDViewModel::class.java] - viewModel = ViewModelProvider(this, viewModelProviderFactory)[viewModel::class.java] + val fdViewModelProviderFactory = FDModelProviderFactory(MainRepository(ApiClient.getApiClient)) + viewModel = ViewModelProvider(this, fdViewModelProviderFactory)[BajajFDViewModel::class.java] + listOfFrequency = ArrayList() getCodeApi() - - - - binding.imgBack.setOnClickListener { finish() } + } + private fun setViewPager() { // steps setting setBackground(selectedShape(), defaultShape(), defaultShape(), defaultShape()) @@ -130,6 +131,7 @@ class BajajFdMainActivity : AppCompatActivity(), BajajFDInterface { } }) + } private fun getCodeApi() { @@ -146,7 +148,10 @@ class BajajFdMainActivity : AppCompatActivity(), BajajFDInterface { Gson().fromJson(response.toString(), GetCodeResponse::class.java) getCodeResponse.Response.StatusCode.let { code -> when (code) { - 200 -> getCodeData(getCodeResponse) + 200 -> { + listOfFrequency = getCodeResponse.Response.GetCodesList + setViewPager() + } // 650 -> refreshToken() else -> {} } @@ -165,10 +170,6 @@ class BajajFdMainActivity : AppCompatActivity(), BajajFDInterface { } } - private fun getCodeData(codeResponse: GetCodeResponse) { - - } - // set Default Step private fun defaultShape(): GradientDrawable { val shape = GradientDrawable() diff --git a/app/src/main/java/com/nivesh/production/bajajfd/ui/fragment/StepOneBajajFDFragment.kt b/app/src/main/java/com/nivesh/production/bajajfd/ui/fragment/StepOneBajajFDFragment.kt index 3f9f587..cc03a14 100644 --- a/app/src/main/java/com/nivesh/production/bajajfd/ui/fragment/StepOneBajajFDFragment.kt +++ b/app/src/main/java/com/nivesh/production/bajajfd/ui/fragment/StepOneBajajFDFragment.kt @@ -1,6 +1,7 @@ package com.nivesh.production.bajajfd.ui.fragment import GetRatesResponse +import ROIDatalist import android.os.Bundle import android.text.Editable import android.text.TextWatcher @@ -15,6 +16,9 @@ import com.google.gson.Gson import com.nivesh.production.bajajfd.R import com.nivesh.production.bajajfd.databinding.FragmentBajajfdStepOneBinding import com.nivesh.production.bajajfd.interfaces.BajajFDInterface +import com.nivesh.production.bajajfd.model.GetCodeRequest +import com.nivesh.production.bajajfd.model.GetCodeResponse +import com.nivesh.production.bajajfd.model.GetCodes import com.nivesh.production.bajajfd.model.GetRatesRequest import com.nivesh.production.bajajfd.ui.activity.BajajFdMainActivity import com.nivesh.production.bajajfd.util.Common @@ -28,6 +32,7 @@ class StepOneBajajFDFragment : Fragment() { private lateinit var bajajFDInterface: BajajFDInterface private lateinit var stepOneBajajFDViewModel: StepOneBajajFDViewModel private lateinit var rgMaturity: RadioButton + public lateinit var listOfTenure : List companion object { fun getInstance(fdInterface: BajajFDInterface): StepOneBajajFDFragment { @@ -49,6 +54,8 @@ class StepOneBajajFDFragment : Fragment() { stepOneBajajFDViewModel = (activity as BajajFdMainActivity).stepOneBajajFDViewModel + listOfTenure = ArrayList() + // Amount binding.edtAmount.addTextChangedListener(object : TextWatcher { override fun afterTextChanged(s: Editable?) { @@ -63,23 +70,21 @@ class StepOneBajajFDFragment : Fragment() { }) // Frequency - val adapter = ArrayAdapter( - activity as BajajFdMainActivity, - R.layout.spinner_dropdown, - resources.getStringArray( - R.array.interestPayoutList - ) - ) - binding.spInterestPayout.setAdapter(adapter) - binding.spInterestPayout.setOnItemClickListener { parent, view, position, id -> - binding.spInterestPayout.error = null - binding.tvFrequency.text = binding.spInterestPayout.text + if ((activity as BajajFdMainActivity).listOfFrequency.isNotEmpty()) { + val adapter = ArrayAdapter(activity as BajajFdMainActivity, R.layout.spinner_dropdown, (activity as BajajFdMainActivity).listOfFrequency) + binding.spInterestPayout.setAdapter(adapter) + binding.spInterestPayout.setOnItemClickListener { parent, view, position, id -> + binding.tlInterestPayout.error = null + binding.tvFrequency.text = (activity as BajajFdMainActivity).listOfFrequency[position].Label + getRatesApi() + } } // Tenure - binding.spTenure.setAdapter(adapter) - binding.spTenure.setOnItemClickListener { parent, view, position, id -> - // getRatesApi() + if (listOfTenure.isNotEmpty()) { + binding.spTenure.setOnItemClickListener { parent, view, position, id -> + + } } @@ -127,12 +132,52 @@ class StepOneBajajFDFragment : Fragment() { } } + private fun getCodeApi() { + val getCodeRequest = GetCodeRequest() + getCodeRequest.ProductName = "BajajFD" + getCodeRequest.Category = "InterestPayoutFreq" + getCodeRequest.Language = "EN" + getCodeRequest.InputValue = "" + stepOneBajajFDViewModel.getCode(getCodeRequest) + stepOneBajajFDViewModel.getRatesMutableData.observe(this) { response -> + when (response) { + is Resource.Success -> { + val getCodeResponse: GetCodeResponse = + Gson().fromJson(response.toString(), GetCodeResponse::class.java) + getCodeResponse.Response.StatusCode.let { code -> + when (code) { + 200 -> { + + } + // 650 -> refreshToken() + else -> {} + } + } + } + + is Resource.Error -> { + response.message?.let { message -> + Log.e(" ", "An error occurred:$message") + } + } + is Resource.Loading -> { + + } + } + } + } + + private fun getRatesApi() { val getRatesRequest = GetRatesRequest() getRatesRequest.fdProvider = "Bajaj" - getRatesRequest.frequency = "" - getRatesRequest.type = "" + getRatesRequest.frequency = binding.spInterestPayout.text.toString() + if (binding.swSeniorCitizen.isChecked){ + getRatesRequest.type = "Non Senior Citizen" + }else{ + getRatesRequest.type = "Senior Citizen" + } stepOneBajajFDViewModel.getRates(getRatesRequest) stepOneBajajFDViewModel.getRatesMutableData.observe(viewLifecycleOwner) { response -> when (response) { @@ -142,7 +187,7 @@ class StepOneBajajFDFragment : Fragment() { getRatesResponse.Response.StatusCode.let { code -> when (code) { 200 -> getRatesData(getRatesResponse) - 650 -> refreshToken() + // 650 -> refreshToken() else -> {} } } @@ -168,7 +213,9 @@ class StepOneBajajFDFragment : Fragment() { private fun getRatesData(getRatesResponse: GetRatesResponse) { - + listOfTenure = getRatesResponse.Response.ROIDatalist + val adapter = ArrayAdapter(activity as BajajFdMainActivity, R.layout.spinner_dropdown, listOfTenure) + binding.spTenure.setAdapter(adapter) } diff --git a/app/src/main/java/com/nivesh/production/bajajfd/ui/providerfactory/FDModelProviderFactory.kt b/app/src/main/java/com/nivesh/production/bajajfd/ui/providerfactory/FDModelProviderFactory.kt new file mode 100644 index 0000000..6734313 --- /dev/null +++ b/app/src/main/java/com/nivesh/production/bajajfd/ui/providerfactory/FDModelProviderFactory.kt @@ -0,0 +1,15 @@ +package com.nivesh.production.bajajfd.ui.providerfactory + +import androidx.lifecycle.ViewModel +import androidx.lifecycle.ViewModelProvider +import com.nivesh.production.bajajfd.repositories.MainRepository +import com.nivesh.production.bajajfd.viewModel.BajajFDViewModel +import com.nivesh.production.bajajfd.viewModel.StepOneBajajFDViewModel + +class FDModelProviderFactory (private val mainRepository: MainRepository) : ViewModelProvider.Factory { + + override fun create(modelClass: Class): T { + return BajajFDViewModel(mainRepository) as T + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/nivesh/production/bajajfd/ui/providerfactory/GetRatesModelProviderFactory.kt b/app/src/main/java/com/nivesh/production/bajajfd/ui/providerfactory/GetRatesModelProviderFactory.kt index 9daa680..72cf610 100644 --- a/app/src/main/java/com/nivesh/production/bajajfd/ui/providerfactory/GetRatesModelProviderFactory.kt +++ b/app/src/main/java/com/nivesh/production/bajajfd/ui/providerfactory/GetRatesModelProviderFactory.kt @@ -3,6 +3,7 @@ package com.nivesh.production.bajajfd.ui.providerfactory import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModelProvider import com.nivesh.production.bajajfd.repositories.MainRepository +import com.nivesh.production.bajajfd.viewModel.BajajFDViewModel import com.nivesh.production.bajajfd.viewModel.StepOneBajajFDViewModel class GetRatesModelProviderFactory (private val mainRepository: MainRepository) : ViewModelProvider.Factory { diff --git a/app/src/main/java/com/nivesh/production/bajajfd/viewModel/BajajFDViewModel.kt b/app/src/main/java/com/nivesh/production/bajajfd/viewModel/BajajFDViewModel.kt index 13db406..5b370e4 100644 --- a/app/src/main/java/com/nivesh/production/bajajfd/viewModel/BajajFDViewModel.kt +++ b/app/src/main/java/com/nivesh/production/bajajfd/viewModel/BajajFDViewModel.kt @@ -5,7 +5,6 @@ import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import com.google.gson.JsonObject import com.nivesh.production.bajajfd.model.GetCodeRequest -import com.nivesh.production.bajajfd.model.GetRatesRequest import com.nivesh.production.bajajfd.repositories.MainRepository import com.nivesh.production.bajajfd.util.Resource import kotlinx.coroutines.launch diff --git a/app/src/main/java/com/nivesh/production/bajajfd/viewModel/StepOneBajajFDViewModel.kt b/app/src/main/java/com/nivesh/production/bajajfd/viewModel/StepOneBajajFDViewModel.kt index 7ba8e32..818d622 100644 --- a/app/src/main/java/com/nivesh/production/bajajfd/viewModel/StepOneBajajFDViewModel.kt +++ b/app/src/main/java/com/nivesh/production/bajajfd/viewModel/StepOneBajajFDViewModel.kt @@ -4,6 +4,7 @@ import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import com.google.gson.JsonObject +import com.nivesh.production.bajajfd.model.GetCodeRequest import com.nivesh.production.bajajfd.model.GetRatesRequest import com.nivesh.production.bajajfd.repositories.MainRepository import com.nivesh.production.bajajfd.util.Resource @@ -19,6 +20,12 @@ class StepOneBajajFDViewModel(private val mainRepository: MainRepository) : View getRatesMutableData.postValue(handleRatesResponse(response)) } + fun getCode(getCodeRequest: GetCodeRequest) = viewModelScope.launch { + getRatesMutableData.postValue(Resource.Loading()) + val response = mainRepository.getCodesResponse(getCodeRequest) + getRatesMutableData.postValue(handleRatesResponse(response)) + } + private fun handleRatesResponse(response: retrofit2.Response): Resource { if (response.isSuccessful) { response.body()?.let { resultResponse ->