自学内容网 自学内容网

问题异常处理收集

问题异常处理收集

  1. java.lang.NoSuchMethodError

Process Name: 'com.test.demo'
Thread Name: 'main'
Back traces starts.
java.lang.IllegalStateException: Fatal Exception thrown on Scheduler.Worker thread.
at rx.internal.schedulers.ScheduledAction.run(ScheduledAction.java:62)
at android.os.Handler.handleCallback(Handler.java:754)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:163)
at android.app.ActivityThread.main(ActivityThread.java:6388)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:930)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:820)
Caused by: java.lang.NoSuchMethodError: No static method withInitial(Ljava/util/function/Supplier;)Ljava/lang/ThreadLocal; in class Ljava/lang/ThreadLocal; or its super classes (declaration of 'java.lang.ThreadLocal' appears in /system/framework/core-oj.jar)
at com.test.demo.common.commonutils.TimeUtil.<clinit>(TimeUtil.java:128)
at com.test.demo.common.commonutils.TimeUtil.getfriendlyTime(TimeUtil.java)
at com.test.demo.common.commonutils.AdViewpagerUtil$3.onPageSelected(AdViewpagerUtil.java:625)
at android.support.v4.view.ViewPager.dispatchOnPageSelected(ViewPager.java:1941)
at android.support.v4.view.ViewPager.setCurrentItemInternal(ViewPager.java:665)

分析:

根据您提供的最新错误日志,问题是 java.lang.NoSuchMethodError,具体是找不到 ThreadLocal 类中的 withInitial 静态方法。这通常表示您正在使用的 Android 版本不支持该方法。

分析:

  • 方法未找到:NoSuchMethodError 表示在运行时找不到指定的方法。这可能是因为:
  • 您的代码或库使用了 Java 8 的特性,但当前的 Android 版本不支持这些特性。
  • withInitial 方法是在 Java 8 中引入的,而某些 Android 版本(特别是低于 Android 8.0)可能不支持。

2. 调用栈:从调用栈中可以看到,问题发生在 TimeUtil 类的静态初始化块中,可能是因为该类依赖于不兼容的 Java 8 特性。

处理建议:

  • 检查 Android 版本:
  • 确保您的应用程序的 minSdkVersion 设置为支持 Java 8 的版本(通常是 Android 8.0 及以上)。

2. 替代方案:

  • 如果您需要在较低版本的 Android 上运行,可以考虑使用其他方法来实现相同的功能,而不是使用 ThreadLocal.withInitial。例如,可以手动创建和管理 ThreadLocal 实例。

3. 使用 Java 7 兼容的代码:

  • 如果您必须支持较低版本的 Android,请避免使用 Java 8 的特性,或者使用第三方库来提供类似的功能。
  • 更新依赖:
  • 检查您使用的库是否有更新版本,可能已经解决了与 Java 8 兼容性相关的问题。

5. 清理和重建项目:

  • 尝试清理项目并重新构建,以确保所有类都被正确编译和打包。

通过以上步骤,您应该能够定位并解决问题。如果需要进一步的帮助,请提供更多的上下文或代码示例。

ThreadLocal.withInitial(Supplier<? extends T> supplier) 方法是在 Java 8 中引入的,因此在较低版本的 Android(特别是 Android 7.1 及以下)中不被支持。

解决方案:

如果您需要在较低版本的 Android 上使用 ThreadLocal,可以使用以下替代方法:

public static final ThreadLocal<SimpleDateFormat> sameDayFormat = new ThreadLocal<SimpleDateFormat>() {
    @Override
    protected SimpleDateFormat initialValue() {
        return new SimpleDateFormat("HH:mm");
    }
};


原文地址:https://blog.csdn.net/ck3345143/article/details/144019572

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!