Create Retrofit instance
import android.util.Log
import com.app.medlegal.data.local.PreferenceManager
import com.app.medlegal.ui.App
import okhttp3.Interceptor
import okhttp3.OkHttpClient
import okhttp3.Response
import okhttp3.logging.HttpLoggingInterceptor
import retrofit2.Retrofit
import retrofit2.converter.gson.GsonConverterFactory
import java.util.concurrent.TimeUnit
object RetrofitInstance {
//------------------Local-------
// private const val BASE_URL = "http://192.168.29.212/advanceliens/" // For Test
private val retrofit: Retrofit by lazy {
val loggingInterceptor = HttpLoggingInterceptor().apply {
level = HttpLoggingInterceptor.Level.BODY
}
val client = OkHttpClient.Builder()
.connectTimeout(15, TimeUnit.SECONDS)
.readTimeout(15, TimeUnit.SECONDS)
.writeTimeout(15, TimeUnit.SECONDS)
.addInterceptor(loggingInterceptor)
.addInterceptor(HttpStatusInterceptor())
.build()
Retrofit.Builder()
.baseUrl(BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.client(client)
.build()
}
val apiService: ApiService by lazy {
retrofit.create(ApiService::class.java)
}
}
class HttpStatusInterceptor : Interceptor {
override fun intercept(chain: Interceptor.Chain): Response {
val userModel = PreferenceManager.getUserData(App.getContext())
Log.e("TAG", "intercept: ${userModel?.data?.token}")
val requestBuilder = chain.request().newBuilder()
requestBuilder.addHeader(
"Authorization",
"Bearer ${(userModel?.data?.token ?: "").toString()}"
)
val request = requestBuilder.build()
return chain.proceed(request)
}
}
//Calling to viewModel
val repository = Repository(RetrofitInstance.apiService)
viewModelScope.launch {
try {
val response = repository.getResponse(
name = name,
)
if (response.status) {
_model.value = response
} else {
_error.value = response.message
}
} catch (e: Exception) {
_error.value =
} finally {
_isLoading.value = false
}
class Repository(private val apiService: ApiService) {
suspend fun getResponse(
name: String,
): GeneralModel {
return apiService.calling(
name = name,
)
}
@FormUrlEncoded
@POST("api")
suspend fun login(
@Field("name") email: String,
): Model
}