Получение NoClassDefFoundError: android.os.AsyncTask - PullRequest
10 голосов
/ 06 августа 2011

Эта проблема беспокоила меня некоторое время, и я не могу найти удовлетворительное решение.

Много раз (не всегда) при создании определенного объекта на эмуляторе 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;
    }
}

Ответы [ 3 ]

8 голосов
/ 02 декабря 2014

ОК, похоже, это проблема с одной из версий Сервисов Google Play.См. 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 android:icon="@drawable/icon_game_launcher"
             android:label="@string/app_name"
             android:name="au.com.mycompany.myapp.MyApplication">
6 голосов
/ 29 августа 2011

Я думаю, что взломал его.

Нить, используемая для загрузки рекламы в моем приложении, на раннем этапе вызвала бы неперехваченное исключение, которое, как я не понимаю на 100%, заставило рабочий поток перестать отвечать. Когда программа пыталась создать AsyncTask, загрузчик классов не работал.

Мораль, возьми отпуск и возвращайся свежими глазами.

0 голосов
/ 06 августа 2011

Попробуйте добавить простой конструктор в StatisticsProvider и проверьте.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...