Дооснащение 2 - ConnectException - только при подключении напрямую к устройству "Alcatel LINKZONE MW40CJ 4G MiFi"
Я разрабатываю приложение для Android для устройства Vuzix M300 Smart Glass. Vuzix M300 имеет настроенную ОС Android Marshmallow (уровень API 23). Чтобы взаимодействовать с API-интерфейсами SAP, я использую Retrofit 2 вместе с SimpleXmlConverter для анализа XML. Сервер использует базовую аутентификацию (OAuth) для авторизации. Ниже приведен код установки модернизации
OkHttpClient client = new OkHttpClient.Builder()
.addInterceptor(new BasicAuthInterceptor(userName, password))
.addInterceptor(new ReceivedCookiesInterceptor()) // Stores session cookies in the SharedPreferences
.addInterceptor(new AddCookiesInterceptor()) // Retrieve session cookies from SharedPreferences and send in the APIs
.build();
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(BuildConfig.BASE_URL)
.client(client)
.addConverterFactory(
SimpleXmlConverterFactory.createNonStrict(
new Persister(new AnnotationStrategy())))
.build();
ApiEndpoints apiEndpoints = retrofit.create(ApiEndpoints.class); // Interface to declare API endpoints.
Call<ResponseBody> call = apiEndpoints.login(ApiConstants.Endpoints.LOGIN);
call.enqueue(new Callback<ResponseBody>() {
@Override
public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
switch (response.code()) {
case HttpURLConnection.HTTP_OK:
EventBus.getDefault().post(new EventModel(EventConstants.LOGIN, true));
break;
/*
Login credentials are not correct
*/
case HttpURLConnection.HTTP_UNAUTHORIZED:
EventBus.getDefault().post(new EventModel(EventConstants.LOGIN, ApiConstants.Actions.NOTHING, ApiConstants.ErrorMessage.LOGIN_FAILED));
break;
default:
EventBus.getDefault().post(new EventModel(EventConstants.LOGIN, ApiConstants.Actions.NOTHING, ApiConstants.ErrorMessage.DEFAULT));
break;
}
}
@Override
public void onFailure(Call<ResponseBody> call, Throwable t) {
EventBus.getDefault().post(new EventModel(EventConstants.LOGIN, ApiConstants.Actions.NOTHING, t.getMessage()));
}
});
Выше код выполняется очень хорошо, за исключением одного сценария. Сценарий таков:
- Создайте сеть Wi-Fi с устройством Alcatel LINKZONE MW40CJ 4G MiFi.
- Подключите мое устройство Vuzix к созданной выше сети.
- Откройте мое приложение на Vuzix и нажмите API входа.
- Произошло исключение ConnectException.
Ниже приведены детали исключения, которые я получил внутри onFailure(Call<ResponseBody> call, Throwable t)
метод:
cause = java.net.ConnectException: failed to connect to /103.80.52.22 (port 8000) after 10000ms: connect failed: ENETUNREACH (Network is unreachable)
detailMessage = "Failed to connect to /103.80.52.22:8000"
За исключением приведенного выше сценария все работает отлично. Я пробовал ниже сценарии, которые работают нормально:
- Vuzix подключен к домашнему WiFi роутеру.
- Vuzix подключен к мобильной точке доступа.
- Vuzix подключен к точке доступа ноутбука (Windows 10), а ноутбук подключен к домашнему WiFi-роутеру.
- Vuzix подключен к точке доступа ноутбука (Windows 10), а ноутбук подключен к сети Wi-Fi устройства Alcatel LINKZONE MW40CJ 4G MiFi. (Даже в этом случае API работает нормально).
- Хит API из браузера, когда ноутбук (Windows 10) подключен к сети Wi-Fi устройства Alcatel LINKZONE MW40CJ 4G MiFi.
Я не знаю, почему API не работает, когда я напрямую подключаю свой Vuzix к сети Wi-Fi устройства Alcatel LINKZONE MW40CJ 4G MiFi.
Пожалуйста помоги!!!