Android ClassNotFoundException
У меня возникла проблема с одним из моих приложений, и мне было интересно, может ли кто-нибудь дать мне какое-либо представление о том, что может быть причиной этого.
Я получаю ClassNotFoundException, важная строка ниже
E/AndroidRuntime(21982): Caused by: java.lang.ClassNotFoundException: couk.doridori.goigo.customUI.GoBoardView in loader dalvik.system.PathClassLoader@446fc3d0
Это приложение не работает уже более года, и 2 дня назад со мной по этому поводу связались два отдельных пользователя, один на HTC wildfire (2.1), а другой на Samsung Galaxy S (?). Теперь я не могу воссоздать эту проблему на своих устройствах (2.2 и 1.6) или эмуляторе (2.1) и не могу понять, почему этот класс не может быть найден загрузчиком классов. Я потратил некоторое время на поиск в Google безрезультатно и надеюсь, что у кого-нибудь есть несколько советов! Это только кажется, когда загружается действие, которое при установке contentView пытается раздуть пользовательское представление с именем GoBoardView, которое расширяет класс View, это просто выполнение простого рисования на холсте и не использует никаких сторонних библиотек или любых других классов, у которых было бы столкновение имен пакетов или что-то в этом роде.
Пожалуйста, помогите! На всякий случай, если это проблема со сборкой, я обновляю весь свой SDK и ADT через eclipse, поскольку он создавался на основе 1.6 и использовал старый ADT, но я понятия не имею, поможет ли это, просто подумал, что стоит попробовать. Спасибо за любой совет! (см. Ниже для редактирования)
E/AndroidRuntime(21982): java.lang.RuntimeException: Unable to start activity ComponentInfo{couk.doridori.goigoFull/couk.doridori.goigoFull.Board}: android.view.InflateException: Binary XML file line #14: Error inflating class couk.doridori.goigo.customUI.GoBoardView
E/AndroidRuntime(21982): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2596)
E/AndroidRuntime(21982): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2621)
E/AndroidRuntime(21982): at android.app.ActivityThread.access$2200(ActivityThread.java:126)
E/AndroidRuntime(21982): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1932)
E/AndroidRuntime(21982): at android.os.Handler.dispatchMessage(Handler.java:99)
E/AndroidRuntime(21982): at android.os.Looper.loop(Looper.java:123)
E/AndroidRuntime(21982): at android.app.ActivityThread.main(ActivityThread.java:4603)
E/AndroidRuntime(21982): at java.lang.reflect.Method.invokeNative(Native Method)
E/AndroidRuntime(21982): at java.lang.reflect.Method.invoke(Method.java:521)
E/AndroidRuntime(21982): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
E/AndroidRuntime(21982): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
E/AndroidRuntime(21982): at dalvik.system.NativeStart.main(Native Method)
E/AndroidRuntime(21982): Caused by: android.view.InflateException: Binary XML file line #14: Error inflating class couk.doridori.goigo.customUI.GoBoardView
E/AndroidRuntime(21982): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:576)
E/AndroidRuntime(21982): at android.view.LayoutInflater.rInflate(LayoutInflater.java:618)
E/AndroidRuntime(21982): at android.view.LayoutInflater.rInflate(LayoutInflater.java:621)
E/AndroidRuntime(21982): at android.view.LayoutInflater.rInflate(LayoutInflater.java:621)
E/AndroidRuntime(21982): at android.view.LayoutInflater.inflate(LayoutInflater.java:407)
E/AndroidRuntime(21982): at android.view.LayoutInflater.inflate(LayoutInflater.java:320)
E/AndroidRuntime(21982): at android.view.LayoutInflater.inflate(LayoutInflater.java:276)
E/AndroidRuntime(21982): at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:207)
E/AndroidRuntime(21982): at android.app.Activity.setContentView(Activity.java:1629)
E/AndroidRuntime(21982): at couk.doridori.goigoFull.Board.onCreate(Board.java:31)
E/AndroidRuntime(21982): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
E/AndroidRuntime(21982): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2544)
E/AndroidRuntime(21982): ... 11 more
E/AndroidRuntime(21982): Caused by: java.lang.ClassNotFoundException: couk.doridori.goigo.customUI.GoBoardView in loader dalvik.system.PathClassLoader@446fc3d0
E/AndroidRuntime(21982): at dalvik.system.PathClassLoader.findClass(PathClassLoader.java:243)
E/AndroidRuntime(21982): at java.lang.ClassLoader.loadClass(ClassLoader.java:573)
E/AndroidRuntime(21982): at java.lang.ClassLoader.loadClass(ClassLoader.java:532)
E/AndroidRuntime(21982): at android.view.LayoutInflater.createView(LayoutInflater.java:466)
E/AndroidRuntime(21982): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:565)
E/AndroidRuntime(21982): ... 22 more
Редактировать
Хорошо, исследуя некоторые ссылки, которые пользователи прокомментировали в ответ на этот вопрос, кажется, что использование неправильного контекста для загрузки действий может вызвать эту проблему. Я нахожу это интересным, потому что одному из двух отправленных мной отчетов журнала предшествовало
W/ActivityManager( 1222): startActivity called from non-Activity context; forcing Intent.FLAG_ACTIVITY_NEW_TASK for: Intent { flg=0x20000 cmp=couk.doridori.goigoFull/.Games }
это говорит само за себя - проблема в том, что я понятия не имею, откуда может быть запущено это действие, где оно использует контекст, не связанный с активностью, поэтому я немного озадачен, думая, что это может быть какая-то многозадачность, такая как quirk, и ее возвращают на передний план чего-либо. Очевидно, это может вызвать проблемы с загрузчиком классов. Если это происходило на телефоне пользователя, я не понимаю, почему я не могу воспроизвести это (и большинство других пользователей тоже не могут).
Другая интересная вещь, которую я нашел по ссылкам, заключается в том, что некоторые люди столкнулись с проблемами из-за "неправильной установки apk", которые могут быть решены путем переустановки, которую я попросил попробовать пользователей, у которых возникла проблема (что не имеет значения). Также кажется, что после возникновения проблемы (которая возникает при первом использовании) она будет постоянной.
Переведено автоматически
Ответ 1
Я не могу не заметить, что ваше имя Activity - couk.doridori.goigoFull.Board
но ваш отсутствующий класс пользовательского представления - couk.doridori.goigo.customUI.GoBoardView
... похоже, у вас могут быть два разных пакета (goigo vs goigoFull).
Вы случайно не делаете умных вещей с библиотечными проектами? Вам следует быть очень осторожным с полными именами классов в коде и xml-макете...
(Если нет, пожалуйста, добавьте дополнительную информацию о настройках вашего проекта, а также вставьте XML-файл вашего макета, которым захлебывается layoutinflater)
Ответ 2
Я уже обсуждал эту проблему здесь : Android: Не удалось создать экземпляр activity / ClassNotFoundException но мы не смогли найти определенного ответа... Однако интересен ответ Джона Дж. Смита о правильном использовании контекста.
Некоторые люди также решили свою проблему в этой теме и высказали несколько идей.
Надеюсь, это поможет...
(Кстати, я рад видеть еще одного программиста Go game !)
Ответ 3
Я добавил пользовательский макет и начал видеть сообщения ClassNotFoundException только после того, как подписал пакет приложения, но сборка для разработки работала просто отлично. Я использовал ProGuard, и добавленный мной новый макет не был включен в список "исключить" в конфигурации ProGuard. Я включил пользовательский макет в список исключений ProGuard, и это устранило проблему для меня.
Ответ 4
Я иногда сталкиваюсь с этой проблемой при разработке - обычно после изменения имен пакетов. Быстрая очистка проекта устраняет проблему для меня.