Вот исключение, которое я получаю:
F3.b: Исключение не удалось доставить потребителю. потому что он уже отменил/устранил поток или исключению некуда идти.
java.lang.ClassCastException
Я проверил структуру проанализированного ответа на убедитесь, что он соответствует ожидаемым классам модели. Кроме того, я удалил повторяющиеся реализации из зависимостей, но проблема осталась.
Что я пробовал:
Я попытался обработать исключение ClassCastException, изменив свой метод входа в систему, включив в него CompositeDisposable. Вот исходный код:
Код: Выделить всё
public static void login(LoginRequest loginRequest, ApiCallback apiCallback) {
RetrofitApiClient.getApiInstance().login(loginRequest)
.subscribe(new DisposableSingleObserver() {
@Override
public void onSuccess(@NonNull LoginResponse loginResponse) {
Log.d(TAG,"loginResponse :: "+ loginResponse.isStatus());
if (loginResponse.isStatus()) {
getSharedData().writeData(SharedData.SharedKeys.AUTH_USER, SharedData.SharedType.GSON, loginResponse.getUser());
}
if (apiCallback != null) {
apiCallback.onSuccess(loginResponse);
}
}
@Override
public void onError(@NonNull Throwable e) {
Log.e(TAG, "login onError: ", e);
if (apiCallback != null) {
apiCallback.onError(e);
}
}
});
}
Код: Выделить всё
public static void login(LoginRequest loginRequest, ApiCallback apiCallback, CompositeDisposable compositeDisposable) {
DisposableSingleObserver disposable = RetrofitApiClient.getApiInstance().login(loginRequest)
.subscribeWith(new DisposableSingleObserver() {
@Override
public void onSuccess(@NonNull LoginResponse loginResponse) {
try {
Log.d(TAG, "loginResponse :: " + loginResponse.isStatus());
if (loginResponse.isStatus()) {
getSharedData().writeData(SharedData.SharedKeys.AUTH_USER, SharedData.SharedType.GSON, loginResponse.getUser());
}
if (apiCallback != null) {
apiCallback.onSuccess(loginResponse);
}
} catch (ClassCastException e) {
Log.e(TAG, "ClassCastException in onSuccess: ", e);
if (apiCallback != null) {
apiCallback.onError(e);
}
}
}
@Override
public void onError(@NonNull Throwable e) {
Log.e(TAG, "login onError: ", e);
if (apiCallback != null) {
apiCallback.onError(e);
}
}
});
// Add disposable to the composite for proper disposal
compositeDisposable.add(disposable);
}
Несмотря на эти изменения, приложение по-прежнему аварийно завершает работу с исключением ClassCastException после экрана входа в систему при развертывании в Play Store.
Дополнительная информация:
Я использую Retrofit для вызовов API.
Структура ответа и классы модели были дважды проверены.
Требуется помощь:
Может ли кто-нибудь предоставить информацию о том, что может вызывает это ClassCastException в производстве, несмотря на то, что в разработке он работает нормально? Мы будем очень признательны за любые предложения по дальнейшей отладке или возможным исправлениям.
Подробнее здесь: https://stackoverflow.com/questions/790 ... ndroid-app