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