Browse Source

error handling in retrofit

PankajBranch
Hemant Khadase 2 years ago
parent
commit
8aa43558bd
8 changed files with 105 additions and 34 deletions
  1. +1
    -0
      app/src/main/AndroidManifest.xml
  2. +1
    -1
      app/src/main/java/com/nivesh/production/bajajfd/interfaces/ApiInterface.kt
  3. +15
    -14
      app/src/main/java/com/nivesh/production/bajajfd/ui/activity/BajajFdMainActivity.kt
  4. +65
    -18
      app/src/main/java/com/nivesh/production/bajajfd/ui/fragment/StepOneBajajFDFragment.kt
  5. +15
    -0
      app/src/main/java/com/nivesh/production/bajajfd/ui/providerfactory/FDModelProviderFactory.kt
  6. +1
    -0
      app/src/main/java/com/nivesh/production/bajajfd/ui/providerfactory/GetRatesModelProviderFactory.kt
  7. +0
    -1
      app/src/main/java/com/nivesh/production/bajajfd/viewModel/BajajFDViewModel.kt
  8. +7
    -0
      app/src/main/java/com/nivesh/production/bajajfd/viewModel/StepOneBajajFDViewModel.kt

+ 1
- 0
app/src/main/AndroidManifest.xml View File

@ -3,6 +3,7 @@
xmlns:tools="http://schemas.android.com/tools">
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.INTERNET"/>
<application
android:allowBackup="true"
android:dataExtractionRules="@xml/data_extraction_rules"


+ 1
- 1
app/src/main/java/com/nivesh/production/bajajfd/interfaces/ApiInterface.kt View File

@ -53,7 +53,7 @@ interface ApiInterface {
suspend fun paymentReQuery(@Body requestBody: RequestBody): Response<JsonObject>
@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<JsonObject>
}

+ 15
- 14
app/src/main/java/com/nivesh/production/bajajfd/ui/activity/BajajFdMainActivity.kt View File

@ -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<GetCodes>
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()


+ 65
- 18
app/src/main/java/com/nivesh/production/bajajfd/ui/fragment/StepOneBajajFDFragment.kt View File

@ -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<ROIDatalist>
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)
}


+ 15
- 0
app/src/main/java/com/nivesh/production/bajajfd/ui/providerfactory/FDModelProviderFactory.kt View File

@ -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 <T : ViewModel> create(modelClass: Class<T>): T {
return BajajFDViewModel(mainRepository) as T
}
}

+ 1
- 0
app/src/main/java/com/nivesh/production/bajajfd/ui/providerfactory/GetRatesModelProviderFactory.kt View File

@ -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 {


+ 0
- 1
app/src/main/java/com/nivesh/production/bajajfd/viewModel/BajajFDViewModel.kt View File

@ -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


+ 7
- 0
app/src/main/java/com/nivesh/production/bajajfd/viewModel/StepOneBajajFDViewModel.kt View File

@ -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<JsonObject>): Resource<JsonObject> {
if (response.isSuccessful) {
response.body()?.let { resultResponse ->


Loading…
Cancel
Save

Powered by TurnKey Linux.