所以我是一名业余Android开发人员,遇到了问题。 我们的应用程序使用ZonedDateTime,但是运行低于oero的Android版本的用户正面临崩溃,这可能是由于ZonedDateTime所致,至少日志是这么说的,请有人帮我解决这个问题吗?
这是错误:
io.reactivex.exceptions.UndeliverableException: 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.NoClassDefFoundError: Failed resolution of: Ljava/time/ZonedDateTime;
at io.reactivex.plugins.RxJavaPlugins.onError(RxJavaPlugins.java:367)
at io.reactivex.android.schedulers.HandlerScheduler$ScheduledRunnable.run(HandlerScheduler.java:126)
at android.os.Handler.handleCallback(Handler.java:751)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6816)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1563)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1451)
Caused by: java.lang.NoClassDefFoundError: Failed resolution of: Ljava/time/ZonedDateTime;
at com.myapp.myapp.cryptoanalysis.fragment.adapter.RVCardAdapter$1.onNext(RVCardAdapter.java:169)
at com.myapp.myapp.cryptoanalysis.fragment.adapter.RVCardAdapter$1.onNext(RVCardAdapter.java:154)
at io.reactivex.internal.operators.observable.ObservableObserveOn$ObserveOnObserver.drainNormal(ObservableObserveOn.java:201)
at io.reactivex.internal.operators.observable.ObservableObserveOn$ObserveOnObserver.run(ObservableObserveOn.java:255)
at io.reactivex.android.schedulers.HandlerScheduler$ScheduledRunnable.run(HandlerScheduler.java:124)
... 7 more
Caused by: java.lang.ClassNotFoundException: Didn't find class "java.time.ZonedDateTime" on path: DexPathList[[zip file "/data/app/com.myapp.myapp-1/base.apk"],nativeLibraryDirectories=[/data/app/com.myapp.myapp-1/lib/arm, /system/lib, /vendor/lib]]
at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)
at java.lang.ClassLoader.loadClass(ClassLoader.java:380)
at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
... 12 more
以下是需要支持较低API版本的Java代码:
@RequiresApi(api = Build.VERSION_CODES.O)
@Override
public void onNext(HistoData histoData) {
TimeSeries series = new BaseTimeSeries("Strategy");
//TODO make usable on API 21+
ZonedDateTime endTime = ZonedDateTime.now().minusDays(historyDays);
//loop for each day of results in histodata
for (int i = 0; i < histoData.getData().size(); i++) {
//create a new base bar
Bar bar = new BaseBar(
endTime.plusDays(i),
histoData.getData().get(i).getOpen(),
histoData.getData().get(i).getHigh(),
histoData.getData().get(i).getLow(),
histoData.getData().get(i).getClose(),
histoData.getData().get(i).getVolumeTo()
);
series.addBar(bar);
}
//RUN ANALYSIS
Signal signal = TechnicalAnalysis.getSignal(series);
//INFLATE LAYOUT STUFF
cryptoViewHolder.mSignal.setText(signal.getSignalResult());
cryptoViewHolder.mRsiValue.setText(String.valueOf((int) signal.getRsiStrength()));
cryptoViewHolder.mMomentumValue.setText(String.valueOf((int) signal.getMomentumStrength()));
cryptoViewHolder.mEmaValue.setText(String.valueOf((int) signal.getEmaStrength()));
//cryptoViewHolder.mSignalStrength.setText("(" + String.valueOf(signal.getSignalStrength()) + ")");
}
在网上搜索时,我发现有人建议使用此库(https://github.com/JakeWharton/ThreeTenABP),但是自述文件不是菜鸟友好的,所以我不知道如何使用它或将公共空白重写为onNext(HistoData histoData )方法使用此库。
请问有人可以帮忙吗?
编辑:此代码是由我们公司的前程序员编写的,我的项目经理希望我对其进行修复。
答案 0 :(得分:0)
onNext
本身的问题,您需要最小化注释的范围,即:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
ZonedDateTime endTime = ZonedDateTime.now().minusDays(historyDays);
} else {
TODO("VERSION.SDK_INT < O")
}
对于低于 O 的设备,您将需要另一个 API 。