Android应用上线后登录环节出现ClassCastException崩溃问题
Android应用开发环境正常,Play Store发布后登录跳转ClassCastException崩溃
开发环境下应用运行无问题,但上传至Play Store后,登录页面跳转时会因ClassCastException崩溃。
异常信息
FATAL EXCEPTION: OkHttp ... Process: , PID: 23630 F3.b: The exception could not be delivered to the consumer because it has already canceled/disposed the flow or the exception has nowhere to go to begin with. Further reading: https://github.com/ReactiveX/RxJava/wiki/What's-different-in-2.0#error-handling | java.lang.ClassCastException at A1.h.l(SourceFile:54) at U4.b.onResponse(SourceFile:32) at retrofit2.OkHttpCall$1.onResponse(SourceFile:11) at F4.l.run(SourceFile:55) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1137) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:637) at java.lang.Thread.run(Thread.java:1012) Caused by: java.lang.ClassCastException at r0.a.s(SourceFile:1) at t3.a.c(SourceFile:1) at R3.c.b(SourceFile:21) at D2.h.b(SourceFile:9) at U4.b.onResponse(SourceFile:20) at retrofit2.OkHttpCall$1.onResponse(SourceFile:11) at F4.l.run(SourceFile:55) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1137) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:637) at java.lang.Thread.run(Thread.java:1012)
已尝试的解决方法
- 核对API响应结构与模型类的字段、类型,确认匹配
- 移除依赖中的重复实现,避免类加载冲突
- 修改登录方法引入
CompositeDisposable,并在onSuccess中添加try-catch捕获ClassCastException:
原始登录代码
public static void login(LoginRequest loginRequest, ApiCallback apiCallback) { RetrofitApiClient.getApiInstance().login(loginRequest) .subscribe(new DisposableSingleObserver<LoginResponse>() { @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); } } }); }
修改后代码(引入CompositeDisposable)
public static void login(LoginRequest loginRequest, ApiCallback apiCallback, CompositeDisposable compositeDisposable) { DisposableSingleObserver<LoginResponse> disposable = RetrofitApiClient.getApiInstance().login(loginRequest) .subscribeWith(new DisposableSingleObserver<LoginResponse>() { @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); }
实际结果:修改后部署到Play Store,崩溃问题仍然存在。
补充信息
- 使用Retrofit进行API调用
- 已反复核对API响应JSON结构与
LoginResponse、User等模型类的字段类型、名称
求助需求
- 为何开发环境正常,生产环境会触发该ClassCastException?
- 请提供进一步的调试方向或修复建议。
内容的提问来源于stack exchange,提问作者Meghan patil
相关产品推荐
相关产品推荐

