Getting NoClassDefFoundError: android.os.AsyncTask



这个问题一直困扰着我,我找不到一个满意的解决办法。

很多时候(不是总是)在Android模拟器上创建一个特定的对象,我得到NoClassDefFoundError: Android .os. asynchtask .

我已经尝试了许多方法删除和重新添加外部库多次,擦除模拟器,重新启动IntelliJ(工作一次,但后来得到了相同的错误。)在这一点上,我所要做的就是构造最简陋的AsyncTask,我仍然得到错误。

下面是整个错误信息:

08-06 16:24:43.546: ERROR/AndroidRuntime(331): FATAL EXCEPTION: main
java.lang.NoClassDefFoundError: android.os.AsyncTask
at com.myapp.activity.StatisticsActivity.onCreate(StatisticsActivity.java:79)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
at android.app.ActivityThread.access$2300(ActivityThread.java:125)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:123)
at android.app.ActivityThread.main(ActivityThread.java:4627)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:521)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
at dalvik.system.NativeStart.main(Native Method)

模拟器运行2.2,我的minSDK是8。下面是有问题的代码:

public class StatisticsActivity extends TabActivity implements AsynchDataDisplay{
...
    public void onCreate(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);
    setContentView(R.layout.statistics);
    StatisticsProvider sp = new StatisticsProvider();
...
    }
}

和StatisticsProvider对象是:

    private class StatisticsProvider extends AsyncTask{
    @Override
    protected Object doInBackground(Object... objects) {
        return null;
    }
}

好吧,看来这是Google play Services的一个版本的问题。见https://code.google.com/p/android/issues/detail?id=81083

看起来一个解决方法可能是添加:

try {
      Class.forName("android.os.AsyncTask");
}
catch(Throwable ignore) {
      // ignored
}

放入Application#onCreate()

如果你还没有一个Application类,那么创建一个从android.app.Application

扩展的类
  1. 将上述代码添加到#onCreate()
  2. 在AndroidManifest的application元素中添加对应用程序类的引用。
<application android:icon="@drawable/icon_game_launcher"
             android:label="@string/app_name"
             android:name="au.com.mycompany.myapp.MyApplication">

我想我已经破解了。

在我的应用程序中加载广告的线程会抛出一个未捕获的异常,以一种我不能100%理解的方式,导致工作线程停止响应。当程序试图创建AsyncTask时,类装入器不工作。

道德,去度个假,带着新鲜的眼光回来。

尝试在StatisticsProvider中添加一个简单的构造函数并检查。

最新更新