Android应用中的ExceptionInInitializerError?

时间:2012-01-19 16:22:00

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

在我的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)

我搜索了谷歌,但没有得到任何解决方案..任何想法为什么我得到这个例外?

彼得

4 个答案:

答案 0 :(得分:14)

Based on this documentation抛出ExceptionInInitializerError以指示在评估静态初始值设定项或静态变量的初始值设定项期间发生了异常。检查你的代码是否有任何静态初始化逻辑。

答案 1 :(得分:0)

java.lang.ExceptionInInitializerError android OS 11

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

在此版本中已修复。

实现“ com.squareup.okhttp3:logging-interceptor:4.4.0”

谢谢。

答案 2 :(得分:0)

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

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

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

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

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

答案 3 :(得分:0)

ExceptionInInitializerError更新链接)表明在静态初始化器中发生了unexpected exception。从字面上看,如果显示此 exception,您应该明白 Java 未能对静态初始化块静态变量的实例化进行评估。 >

无论如何,每个时刻静态初始化器都会遇到一个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 值的 静态变量。我解决了它,一切都很完美。