【问题标题】:ExceptionInInitializerError in Android app?Android应用程序中的ExceptionInInitializerError?
【发布时间】:2012-01-19 16:21:59
【问题描述】:

在我的 Android 应用中,WebView 活动类具有以下行,

webView.addJavascriptInterface(new JSInterface(this), "Android");   

在 JSInterface 类中,我正在初始化 Google“SpreadSheetService”,如下所示,

import com.google.gdata.client.spreadsheet.SpreadsheetService;

--- some more imports ---


public class JSInterface {
    Context mContext;

    public SpreadsheetService service;

    /** Instantiate the interface and set the context */
    JSInterface(Context c) {
        mContext = c;
        service = new SpreadsheetService("List Demo");
    }

    ------- some more code -----

当我运行应用程序时,出现以下异常,

01-19 21:38:00.652: E/AndroidRuntime(4085): java.lang.ExceptionInInitializerError

有以下痕迹

01-19 21:38:00.652: E/AndroidRuntime(4085): FATAL EXCEPTION: main
01-19 21:38:00.652: E/AndroidRuntime(4085): java.lang.ExceptionInInitializerError
01-19 21:38:00.652: E/AndroidRuntime(4085):     at com.android.quotes.JSInterface.<init>(JSInterface.java:33)
01-19 21:38:00.652: E/AndroidRuntime(4085):     at com.android.quotes.CHQuotesActivity.onCreate(CHQuotesActivity.java:19)
01-19 21:38:00.652: E/AndroidRuntime(4085):     at android.app.Activity.performCreate(Activity.java:4465)
01-19 21:38:00.652: E/AndroidRuntime(4085):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)
01-19 21:38:00.652: E/AndroidRuntime(4085):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1919)
01-19 21:38:00.652: E/AndroidRuntime(4085):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1980)
01-19 21:38:00.652: E/AndroidRuntime(4085):     at android.app.ActivityThread.access$600(ActivityThread.java:122)
01-19 21:38:00.652: E/AndroidRuntime(4085):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1146)
01-19 21:38:00.652: E/AndroidRuntime(4085):     at android.os.Handler.dispatchMessage(Handler.java:99)
01-19 21:38:00.652: E/AndroidRuntime(4085):     at android.os.Looper.loop(Looper.java:137)
01-19 21:38:00.652: E/AndroidRuntime(4085):     at android.app.ActivityThread.main(ActivityThread.java:4340)
01-19 21:38:00.652: E/AndroidRuntime(4085):     at java.lang.reflect.Method.invokeNative(Native Method)
01-19 21:38:00.652: E/AndroidRuntime(4085):     at java.lang.reflect.Method.invoke(Method.java:511)

我搜索了谷歌,但没有得到任何解决方案。知道为什么我会收到这个异常吗?

彼得

【问题讨论】:

  • 是否可以在代码中的任何位置创建 asyncTask/Handler?
  • 似乎 trace 仅显示exception 发生的位置。但没有显示它是什么原因造成的,从异常中找到这一行Caused by:。检查导致错误的行。

标签: android android-webview google-spreadsheet-api


【解决方案1】:

Based on this documentation 抛出 ExceptionInInitializerError 以指示在计算静态初始化程序或静态变量的初始化程序期间发生异常。检查您的代码是否有任何静态初始化逻辑。

【讨论】:

  • 是的,但可能是什么问题?静态成员应该没有被访问的问题,因此它是静态的。
  • @IgorGanapolsky:不是因为被访问,而是因为初始化的值没有正确构造。静态变量的右侧部分。
  • 有趣,初始化成什么?不可转换的类型或 null?
  • @IgorGanapolsky:我的猜测是,某些类实例要么抛出异常(或)导致一些不良依赖。
  • @Nambari :我已经这样做了:stackoverflow.com/q/42227184/2135363 .. 在这里:stackoverflow.com/q/42248119/2135363 .. 请看看。
【解决方案2】:

java.lang.ExceptionInInitializerError android OS 11

如果这与 OkHttp 相关,请更新您的版本 4.4.0。

在这个版本中它是固定的。

实现 'com.squareup.okhttp3:logging-interceptor:4.4.0'

谢谢。

【讨论】:

  • 这对我有很大帮助.. 谢谢!
  • @GinealSoftwareDev 欢迎 :)
【解决方案3】:

如果您的 android 版本是 11 或更高版本,您可能会遇到 java.lang.ExceptionInInitializerErrorIllegalStateException,您需要为其添加最新的 okhttp3 依赖项:

implementation 'com.squareup.okhttp3:okhttp:4.9.1'  

implementation 'com.squareup.okhttp3:logging-interceptor:4.9.0'

【讨论】:

    【解决方案4】:

    奇怪!但是让我分享一下我的经验,也许它可以帮助某人!

    正在开发之前运行没有任何问题的 Android 应用。 在我休息我的 Android 设备并在重置后第一次安装应用程序之后。一世 得到了这个异常java.lang.ExceptionInInitializerError

    1. 我卸载了应用程序
    2. 清理项目
    3. 重建项目

    之后,当我运行应用程序时,异常消失了。

    我不知道发生了什么,但上述步骤刚刚解决了问题。

    【讨论】:

      【解决方案5】:

      ExceptionInInitializerError更新的链接)表明unexpected exception 出现在静态初始化程序中。从字面上看,如果显示此exception,则应该理解Java 未能对静态初始化块静态变量 的实例化进行评估。

      无论如何,static initializer 遇到exception 的每一刻都会自动包装到ExceptionInInitializerError 类的实例中。通过这种方式,它保留了对实际 exception 的引用作为根本原因。

      在我的情况下,使用以下异常跟踪:

         java.lang.ExceptionInInitializerError
              at com.fole_Studios.sup.database.DBqueries.getAllUniversities(DBqueries.java:581)
              at com.fole_Studios.sup.RegisterFragment.universityDataList(RegisterFragment.java:216)
               ...............
           Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String com.google.firebase.auth.FirebaseUser.getUid()' on a null object reference
              at com.fole_Studios.sup.database.DBqueries.<clinit>(DBqueries.java:80)
      

      我直接参考了导致Caused by: 错误的原因。因此,我发现我正在实例化一个具有null 值的静态变量。我解决了它,一切都很完美。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-08-12
        • 1970-01-01
        • 1970-01-01
        • 2013-06-30
        • 2012-08-11
        相关资源
        最近更新 更多