Я пытаюсь перехватить retrofit / okhttp эту ошибку / исключение
java.net.ConnectException: Failed to connect to /192.168.1.52:80
, чтобы предотвратить сбой приложения, который может произойти, если URL-адрес недоступен. Тем не менее, я не могу найти способ сделать это
это код, в котором я объявляю модернизацию, перехватчик и т. Д. c.
private const val BASE_URL = "http://192.168.1.52/api/v1/"
interface ApiService {
@GET("authenticate")
suspend fun checkPhoneNumber(@Query("phone_number") type:String):
UserProperty
// Deferred<UserProperty>
@POST("authenticate/register")
fun registerUser(@Body UserRegister: UserRegisterProperty):
Call<List<UserProperty>>
}
object objectApi {
private val moshi = Moshi.Builder()
.add(KotlinJsonAdapterFactory())
.build()
val interceptor = HttpLoggingInterceptor()
val retrofitService: ApiService by lazy {
val timeout:Long = 7000;
val client = OkHttpClient
.Builder()
.addInterceptor(interceptor).connectTimeout(timeout,TimeUnit.MILLISECONDS).build()
interceptor.apply { interceptor.level = HttpLoggingInterceptor.Level.BODY }
var retrofit = Retrofit.Builder()
.client(client)
.addConverterFactory(MoshiConverterFactory.create(moshi))
.addCallAdapterFactory(CoroutineCallAdapterFactory())
.baseUrl(BASE_URL)
.build()
retrofit.create(ApiService::class.java)
//code
}
}
вот фрагмент кода, где Я выполняю вызов API
private fun getUserData(phone_number: String) {
Log.d("Response","getUserData Run")
coroutineScope.launch () {
Log.d("Response","coroutine Run")
var getPropertiesDeferred = DolpaguApi.retrofitService.checkPhoneNumber(phone_number)
try {
var _result = getPropertiesDeferred
_response = "Success: ${_result.id} User properties retrieved"
Log.d("Response API","SUCCESS : ${_result.id}")
//check status user
if (_result.status.equals("Inactive")){
Log.d("Auth","New User Intent")
_intent= Intent(this@InputOTPActivity, NewUserActivity::class.java)
_intent.putExtra("phoneNumber",_phoneNumber)
} else if(_result.status.equals("Active")){
Log.d("Auth","Main Menu Intent")
_intent= Intent(this@InputOTPActivity, MainMenuActivity::class.java)
} else{
Log.d("Auth","Main Activity Intent")
_intent= Intent(this@InputOTPActivity, MainActivity::class.java)
}
moveToNextIntent()
} catch (t:Throwable) {
_response = "Failure: " + t.message
Log.d("Response Fail","FAILURE : ${t.message}")
auth.signOut()
}
}
}
* ПРИМЕЧАНИЕ. Приложение работает нормально, если доступен URL-адрес / место назначения. но если адрес назначения / URL недоступен, приложение просто сканирует sh. Я хочу предотвратить сбой приложения. вместо этого я хочу показать ошибку / исключение для интерфейса