2014-11-25 1 views
15

С пару недель, я вижу все больше и больше аварий моего приложения за исключением следующегоAndroid: NoClassDefFoundError android.os.AsyncTask

Fatal Exception: java.lang.NoClassDefFoundError android.os.AsyncTask

Этот код работает в течение месяца без каких-либо проблем, и теперь он кажется неудачным на некоторых устройствах (75% android 2.3.x и 25% android 4.0.3) Не удается, когда я создаю новый экземпляр класса который расширяет AsyncTask.

Я создаю этот класс из нити пользовательского интерфейса.

Как этот класс не может быть найден так, как он определен в SDK?

+3

Вы были бы любезны поделиться своим кодом? –

+0

Это не относится к коду. Я получил эти случайные сбои из разных частей моего кода, которые не обновлялись в течение месяца. Это не проблема с кодом, может быть проблема с проектом/сборкой, но я не вижу, как может быть NoClassDefFoundError в AsyncTask ... – user1026605

+0

, если вы используете eclipse, щелкните правой кнопкой мыши проект androidtools> addsupport lib, если он не работает, попробуйте исправить свойства проекта. Это мое предположение. пожалуйста, предоставьте logcat для дальнейшего расследования. – Amith

ответ

0

У меня такая же ошибка:

BuscaDatosJugador().execute(participante.getIconImageUrl(),String.valueOf(altoenvio), String.valueOf(contador)); 

Мое решение:

final Runnable r = new Runnable() 
{ 
    public void run() 
    { 
     try { 
      --- my code --- 
     } 
    }; 

    r.run(); 
} 
+1

Это ошибка Служб Google Play. Я не хочу обновлять свой код в качестве обходного пути. Я хочу продолжать использовать asynctasks, что позволяет мне легко обновлять интерфейс – user1026605

1

Такая же проблема здесь. Я вижу их для 95% случаев на устройствах Android 4.0.3. оставшиеся 5% для 2.3 устройств

Ошибки случайным образом происходят из разных частей кода. Некоторые примеры:

java.lang.NoClassDefFoundError: android/os/AsyncTask 
    at android.webkit.WebView.setupPackageListener(WebView.java:1305) 
    at android.webkit.WebView.<init>(WebView.java:1176) 
    at android.webkit.WebView.<init>(WebView.java:1136) 

и

java.lang.NoClassDefFoundError: android/os/AsyncTask 
    at android.webkit.WebView.setupPackageListener(WebView.java:1354) 
    at android.webkit.WebView.access$10900(WebView.java:363) 
    at android.webkit.WebView$PrivateHandler.handleMessage(WebView.java:10411) 

и

java.lang.NoClassDefFoundError: android.os.AsyncTask 
    at android.webkit.WebView.setupPackageListener(WebView.java:1385) 
    at android.webkit.WebView.<init>(WebView.java:1192) 
    at android.webkit.WebView.<init>(WebView.java:1150) 
    at android.webkit.WebView.<init>(WebView.java:1135) 
    at android.webkit.WebView.<init>(WebView.java:1106) 
    at android.webkit.WebView.<init>(WebView.java:1093) 
    at com.google.android.gms.ads.internal.util.g.f(SourceFile:400) 
    at com.google.android.gms.ads.internal.util.g.a(SourceFile:385) 

совершенно непонятно, почему эти ошибки происходят. обычно я не вижу ничего в стеке, указывающем на мой код.

10

Да, похоже, что это проблема с одной из версий Служб Google Play. См https://code.google.com/p/android/issues/detail?id=81083

работа вокруг должна добавить:

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

в ваш Application#onCreate()

это, кажется, для того, чтобы корень ClassLoader нагрузки AsyncTask так что тогда можно получить в Play Services.

0

У меня была такая же ошибка на android 2.3.3, но такое же приложение было стабильным на 4.0+. Это Freemium, и ошибка возникает только в режиме FREE, который запускает рекламные объявления Google Admob. Поэтому ошибка должна быть связана с этим, но у меня нет деталей. Вот как я решил проблему:

Выполнение инструкции, которая приведет к загрузке класса AsyncTask перед загрузкой объявлений.

шаги 1: Создать класс расширения фиктивная AsyncTask

public class DummyAsyncTask extends AsyncTask<Void, Void, Void>{ 

    @Override 
    protected Void doInBackground(Void... params) { 
     // TODO Auto-generated method stub 
     return null; 
    } 
} 

шаг 2: только в вашей основной деятельности:

public class MainActivity extends Activity { 

    public void onCreate(Bundle savedInstanceState) { 

     super.onCreate(savedInstanceState); 
     new DummyAsyncTask(); 
     . 
     .some code 
     . 
     load your ads here 
    } 
} 

После шага 2 выше, все остальные секции кода, который конкретизирует AsyncTask расширенный класс нормально работать.

 Смежные вопросы

  • Нет связанных вопросов^_^