Retrofit service 2
package com.example.retrofit2
import android.content.Context
import android.util.Log
import com.jakewharton.retrofit2.adapter.kotlin.coroutines.CoroutineCallAdapterFactory
import com.kaopiz.kprogresshud.KProgressHUD
import kotlinx.coroutines.CoroutineExceptionHandler
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import okhttp3.OkHttpClient
import okhttp3.ResponseBody
import org.json.JSONObject
import retrofit2.Response
import retrofit2.Retrofit
import retrofit2.converter.gson.GsonConverterFactory
import java.util.concurrent.TimeUnit
class RetrofitService() {
private var kProgressHUD: KProgressHUD? = null
lateinit var context: Context
fun callService(
mContext: Context, dialogFlag: Boolean, token: String,
requestProcessor: RetrofitResponse
) {
try {
context = mContext
if (dialogFlag) {
createProgressBar(mContext)
}
val okHttpClient: OkHttpClient?
if (token.isEmpty()) {
okHttpClient = OkHttpClient.Builder()
.readTimeout(10, TimeUnit.MINUTES)
.connectTimeout(10, TimeUnit.MINUTES)
.build()
} else {
val client = OkHttpClient.Builder()
.readTimeout(10, TimeUnit.MINUTES)
.connectTimeout(10, TimeUnit.MINUTES)
.addInterceptor { chain ->
val original = chain.request()
val request = original.newBuilder()
.header("Authorization", token)
.method(original.method, original.body)
.build()
chain.proceed(request)
}
okHttpClient = client.build()
}
val retrofit = Retrofit.Builder()
.baseUrl(
"https://www.simplifiedcoding.net/demos/")
.client(okHttpClient)
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(CoroutineCallAdapterFactory())
.build()
val retrofitApi = retrofit.create(RetrofitApi::class.java)
val coRoutineExceptionHandler = CoroutineExceptionHandler { _, t ->
t.printStackTrace()
CoroutineScope(Dispatchers.Main).launch {
try {
dismissProgressBar()
requestProcessor.onException(t.message)
t.printStackTrace()
if (t.message.toString().contains("Unable to resolve host")) {
/*CommonMethods.alertResponseMessage(
mContext,
mContext.resources.getString(R.string.unable_to_resolve)
)*/
} else {
//timeout
Log.e("ConnectionTimeout", "====>")
/* CommonMethods.alertResponseMessage(
mContext,
mContext.resources.getString(R.string.server_error)
)*/
}
} catch (e: Exception) {
e.printStackTrace()
}
}
}
CoroutineScope(Dispatchers.IO + coRoutineExceptionHandler).launch {
val response = requestProcessor.sendRequest(retrofitApi) as Response<*>
CoroutineScope(Dispatchers.Main).launch {
dismissProgressBar()
requestProcessor.onResponse(response as T)
Log.e("response===== ", response.toString())
if (!response.isSuccessful) {
try {
val res = response.errorBody()?.string().toString()
Log.e("responseData=====", "errorBody--> $res")
if (res != "Unauthorized") {
val jsonObject = JSONObject(res)
when {
jsonObject.has("errors") && !jsonObject.isNull("errors") -> {
val messageObject = jsonObject.getJSONObject("errors")
val message = messageObject.getString("msg")
requestProcessor.onException(message)
}
jsonObject.has("message") && !jsonObject.isNull("message") -> {
val message = jsonObject.getString("message")
requestProcessor.onException(message)
}
jsonObject.has("msg") && !jsonObject.isNull("msg") -> {
val message = jsonObject.getString("msg")
requestProcessor.onException(message)
}
jsonObject.has("data") && !jsonObject.isNull("data") -> {
val message = jsonObject.getString("data")
requestProcessor.onException(message)
}
}
} else {
/* CommonMethods.alertResponseMessage(
mContext,
mContext.resources.getString(R.string.unauthrized)
)*/
}
} catch (e: Exception) {
e.printStackTrace()
}
}
else{
Log.e("successresponse","who are you")
}
}
}
} catch (e: Exception) {
e.printStackTrace()
}
}
private fun createProgressBar(context: Context) {
kProgressHUD = KProgressHUD(context)
kProgressHUD?.setStyle(KProgressHUD.Style.SPIN_INDETERMINATE)
kProgressHUD?.setCancellable(false)
kProgressHUD?.setAnimationSpeed(1)
kProgressHUD?.setDimAmount(0.2f)
kProgressHUD?.show()
}
private fun dismissProgressBar() {
if (kProgressHUD != null) {
if (kProgressHUD?.isShowing!!) {
kProgressHUD?.dismiss()
}
}
}
}
Comments
Post a Comment