2010-06-22 2 views
6

Итак, я столкнулся с проблемой сегодня, работая над своей программой для Android. У меня есть класс, который превращает, что XML-строку в объект Java (третья сторона), и он прекрасно работает как обычный проект Java, но на Android я получаю эту странную ошибку:ClassNotFoundException Android

 
06-21 22:44:26.402: DEBUG/App(259): java.lang.ClassNotFoundException: com.package.mycode.Class in loader [email protected] 
06-21 22:44:26.402: DEBUG/App(259):  at dalvik.system.PathClassLoader.findClass(PathClassLoader.java:243) 

я скрыть мое имя приложения и мой пакет по понятным причинам, но мне было интересно, если кто-нибудь когда-либо сталкивался с такими проблемами. Класс находится в правильном пакете, который является добавленной мной библиотекой. Другие классы, о которых я упоминал ранее, есть, и они могут быть сделаны. Есть ли другие причины, которые бросают ClassNotFoundException?

Спасибо, Джейк

+0

Я не знаю, что это значит> _ < – jakehschwartz

ответ

9
private static void fixClassLoaderIssue() 
{ 
    ClassLoader myClassLoader = MyClass.class.getClassLoader(); 
    Thread.currentThread().setContextClassLoader(myClassLoader); 
} 

Это код, который у меня есть, что я считаю, исправил эту проблему. MyClass - это класс, который у меня есть в моем проекте. Как я уже сказал, совместная работа показала это мне, но это выглядит довольно прямолинейно.

+0

спасибо, что поделились этим. –

+0

Где вы это называете? – jjnguy

+0

Я вызываю его в конструкторе по умолчанию моего класса приложения. – jakehschwartz

0

Are there any other reasons a ClassNotFoundException is thrown?

IIRC, он также может быть выброшен, если не может быть загружен какой-либо другой класс статических зависимостей «com.package.mycode.Class», или, если есть проблема во время статической инициализации. Но они должны отображаться как вложенное исключение ... при первом попытке загрузить класс.

0

У Android не все доступные классы Java доступны на обычной машине. Отсутствуют некоторые классы, которые могут вызвать эту ошибку. Но это должно быть показано во время компиляции. Посмотрите на этот list, чтобы узнать, какие классы поддерживаются и которые не поддерживаются.

Опять же я только предполагаю, что компилятор должен увидеть недостающие классы.

+0

У меня нет других классов, импортируемых или полагающихся на них, которые не поддерживаются. И файл, который пытается быть загруженным, является частью файла jar, который я создал, поэтому он отлично компилируется с другими файлами jar. Надеюсь, у меня есть то, что вы имели в виду. – jakehschwartz

+0

Куда вы помещаете этот файл jar в свой проект Android? – Janusz

0

Для приложения для Android у меня была такая же проблема с внешним файлом jar. В моем случае решение заключалось в том, чтобы переместить банку из папки «lib» в папку «libs» по умолчанию для Android.

Когда jar был в папке lib (также был добавлен для создания пути), в то время как в Eclipse не было проблемы с построением, приложение выдавало ClassNotFoundException во время выполнения. Как только я переместил банку в папку «libs», банка начала появляться в разделе «Android Dependencies», и приложение начало работать нормально.

Это некоторые из других обсуждений по той же теме.

Adding a library/JAR to an Eclipse Android project

Android: What is the folder name of the jar files (LIB or LIBS)?

How to specify lib folder for JARs when using Android-generated ant build file?

0

я имел проблему Начинание aynctask. он работал просто отлично, но потом я добавил

line = StringEscapeUtils.unescapeHtml4(line); 

(его commons.apache.org библиотека) в AsyncTask то много проблем. он компилируется нормально, но когда я пытался запустить, он сказал, что класс не найден в моем классе asynctask. но он ударил резюме, он продолжал заниматься асинхронной задачей, а затем умер.

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

0

Are there any other reasons a ClassNotFoundException is thrown?

В моем случае, я получил ClassNotFoundException для моей основной деятельности при создании APK с затмением, но не имеют каких-либо проблем при сборке мавена.

Проблема заключалась в том, что моя основная деятельность заключалась в реализации интерфейса из простого Java-проекта «POJO library». В проекте Android> Свойства> Путь сборки Java> Заказ и экспорт Мне нужно было поставить галочку для экспорта «POJO Library». После очистки проекта интерфейс был включен в class.dex в apk, и проблема была решена.

Я был направлен здесь, когда пытался понять проблему, и я надеюсь, что это поможет кому-то еще в той же ситуации.

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