No virtual method newJsonReader 解决办法

本文记录了一款Android应用在特定POS设备上出现FATAL EXCEPTION错误的过程及解决方案。问题出现在使用RxJava和Retrofit进行网络请求时,通过更新依赖并未解决,最终通过重新刷写POS系统解决了问题。

运行一个安卓程序,出现以下错误原因:

FATAL EXCEPTION: RxIoScheduler-3
Process: com.test.app, PID: 12041
java.lang.IllegalStateException: Fatal Exception thrown on Scheduler.Worker thread.
at rx.internal.schedulers.ScheduledAction.run(ScheduledAction.java:59)
at java.util.concurrent.ExecutorsRunnableAdapter.call(Executors.java:422)atjava.util.concurrent.FutureTask.run(FutureTask.java:237)atjava.util.concurrent.ScheduledThreadPoolExecutorRunnableAdapter.call(Executors.java:422)atjava.util.concurrent.FutureTask.run(FutureTask.java:237)atjava.util.concurrent.ScheduledThreadPoolExecutorScheduledFutureTask.access201(ScheduledThreadPoolExecutor.java:152)atjava.util.concurrent.ScheduledThreadPoolExecutor201(ScheduledThreadPoolExecutor.java:152)atjava.util.concurrent.ScheduledThreadPoolExecutorScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:265)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
at java.util.concurrent.ThreadPoolExecutorWorker.run(ThreadPoolExecutor.java:587)atjava.lang.Thread.run(Thread.java:818)Causedby:java.lang.NoSuchMethodError:NovirtualmethodnewJsonReader(Ljava/io/Reader;)Lcom/google/gson/stream/JsonReader;inclassLcom/google/gson/Gson;oritssuperclasses(declarationofcom.google.gson.Gsonappearsin/system/framework/android.urovo.device.jar)atretrofit2.converter.gson.GsonResponseBodyConverter.convert(GsonResponseBodyConverter.java:35)atretrofit2.converter.gson.GsonResponseBodyConverter.convert(GsonResponseBodyConverter.java:25)atretrofit2.ServiceMethod.toResponse(ServiceMethod.java:119)atretrofit2.OkHttpCall.parseResponse(OkHttpCall.java:218)atretrofit2.OkHttpCall.execute(OkHttpCall.java:180)atretrofit2.adapter.rxjava.CallExecuteOnSubscribe.call(CallExecuteOnSubscribe.java:40)atretrofit2.adapter.rxjava.CallExecuteOnSubscribe.call(CallExecuteOnSubscribe.java:24)atretrofit2.adapter.rxjava.BodyOnSubscribe.call(BodyOnSubscribe.java:36)atretrofit2.adapter.rxjava.BodyOnSubscribe.call(BodyOnSubscribe.java:28)atrx.Observable.unsafeSubscribe(Observable.java:10144)atrx.internal.operators.OnSubscribeMap.call(OnSubscribeMap.java:48)atrx.internal.operators.OnSubscribeMap.call(OnSubscribeMap.java:33)atrx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:48)atrx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:30)atrx.Observable.unsafeSubscribe(Observable.java:10144)atrx.internal.operators.OnSubscribeMap.call(OnSubscribeMap.java:48)atrx.internal.operators.OnSubscribeMap.call(OnSubscribeMap.java:33)atrx.Observable.unsafeSubscribe(Observable.java:10144)atrx.internal.operators.OperatorMergeWorker.run(ThreadPoolExecutor.java:587)atjava.lang.Thread.run(Thread.java:818)Causedby:java.lang.NoSuchMethodError:NovirtualmethodnewJsonReader(Ljava/io/Reader;)Lcom/google/gson/stream/JsonReader;inclassLcom/google/gson/Gson;oritssuperclasses(declarationof‘com.google.gson.Gson′appearsin/system/framework/android.urovo.device.jar)atretrofit2.converter.gson.GsonResponseBodyConverter.convert(GsonResponseBodyConverter.java:35)atretrofit2.converter.gson.GsonResponseBodyConverter.convert(GsonResponseBodyConverter.java:25)atretrofit2.ServiceMethod.toResponse(ServiceMethod.java:119)atretrofit2.OkHttpCall.parseResponse(OkHttpCall.java:218)atretrofit2.OkHttpCall.execute(OkHttpCall.java:180)atretrofit2.adapter.rxjava.CallExecuteOnSubscribe.call(CallExecuteOnSubscribe.java:40)atretrofit2.adapter.rxjava.CallExecuteOnSubscribe.call(CallExecuteOnSubscribe.java:24)atretrofit2.adapter.rxjava.BodyOnSubscribe.call(BodyOnSubscribe.java:36)atretrofit2.adapter.rxjava.BodyOnSubscribe.call(BodyOnSubscribe.java:28)atrx.Observable.unsafeSubscribe(Observable.java:10144)atrx.internal.operators.OnSubscribeMap.call(OnSubscribeMap.java:48)atrx.internal.operators.OnSubscribeMap.call(OnSubscribeMap.java:33)atrx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:48)atrx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:30)atrx.Observable.unsafeSubscribe(Observable.java:10144)atrx.internal.operators.OnSubscribeMap.call(OnSubscribeMap.java:48)atrx.internal.operators.OnSubscribeMap.call(OnSubscribeMap.java:33)atrx.Observable.unsafeSubscribe(Observable.java:10144)atrx.internal.operators.OperatorMergeMergeSubscriber.onNext(OperatorMerge.java:248)
at rx.internal.operators.OperatorMergeMergeSubscriber.onNext(OperatorMerge.java:148)atrx.internal.operators.OnSubscribeMapMergeSubscriber.onNext(OperatorMerge.java:148)atrx.internal.operators.OnSubscribeMapMapSubscriber.onNext(OnSubscribeMap.java:77)
at rx.internal.operators.OnSubscribeMapMapSubscriber.onNext(OnSubscribeMap.java:77)atrx.internal.util.ScalarSynchronousObservableMapSubscriber.onNext(OnSubscribeMap.java:77)atrx.internal.util.ScalarSynchronousObservableWeakSingleProducer.request(ScalarSynchronousObservable.java:276)
at rx.Subscriber.setProducer(Subscriber.java:211)
at rx.internal.operators.OnSubscribeMapMapSubscriber.setProducer(OnSubscribeMap.java:102)atrx.internal.operators.OnSubscribeMapMapSubscriber.setProducer(OnSubscribeMap.java:102)atrx.internal.operators.OnSubscribeMapMapSubscriber.setProducer(OnSubscribeMap.java:102)
at rx.internal.util.ScalarSynchronousObservableJustOnSubscribe.call(ScalarSynchronousObservable.java:138)atrx.internal.util.ScalarSynchronousObservableJustOnSubscribe.call(ScalarSynchronousObservable.java:138)atrx.internal.util.ScalarSynchronousObservableJustOnSubscribe.call(ScalarSynchronousObservable.java:129)
at rx.Observable.unsafeSubscribe(Observable.java:10144)
at rx.internal.operators.OnSubscribeMap.call(OnSubscribeMap.java:48)
at rx.internal.operators.OnSubscribeMap.call(OnSubscribeMap.java:33)
at rx.Observable.unsafeSubscribe(Observable.java:10144)
at rx.internal.operators.OnSubscribeMap.call(OnSubscribeMap.java:48)
at rx.internal.operators.OnSubscribeMap.call(OnSubscribeMap.java:33)
at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:48)
at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:30)
at rx.Observable.unsafeSubscribe(Observable.java:10144)
at rx.internal.operators.OnSubscribeDefer.call(OnSubscribeDefer.java:51)
at rx.internal.operators.OnSubscribeDefer.call(OnSubscribeDefer.java:35)
at rx.Observable.unsafeSubs

按照网上的解决办法,更新gson依赖包到最新版本2.8.2,但依然没有解决问题。

这个APP是在优博讯的POS机器上运行的,在优博讯另外POS上运行都没有问题。而且这个APP在很多安卓手机上运行都没有问题,偏偏这款POS系统上出现问题。 后找了个优博讯刷机包文件,300多兆,POS上操作系统重新刷机了,问题解决。

2018年3月18日

An unimplemented pure virtual method is a method in a C++ class that is declared as pure virtual, but not implemented in the class. A pure virtual method is a virtual function that does not have any implementation in the base class, and its implementation is provided by the derived class. When a pure virtual method is not implemented in a derived class, it remains unimplemented, and the derived class becomes an abstract class. An abstract class cannot be instantiated, and it should be used as a base class for other classes that provide the implementation for the pure virtual methods. If a class contains an unimplemented pure virtual method, the compiler will generate an error message, and the class cannot be instantiated. For example, consider a class called Shape that has a pure virtual method called area(): ``` class Shape { public: virtual double area() const = 0; // pure virtual method }; ``` If a derived class, such as Circle, does not provide an implementation for the area() method, it will become an abstract class: ``` class Circle : public Shape { public: // no implementation for area() method }; ``` The compiler will generate an error message because the Circle class is abstract and cannot be instantiated. To fix this error, the Circle class should provide an implementation for the area() method: ``` class Circle : public Shape { public: double area() const override { return 3.14 * radius * radius; } private: double radius; }; ``` Now the Circle class can be instantiated, and it provides its own implementation for the area() method.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值