java.lang.RuntimeException: невозможно создать экземпляр компонента ComponentInfo


151

Я пытался запустить пример кода. При запуске приложения в эмуляторе Android 1.5 я получил эти ошибки .... У кого-нибудь есть подсказка ...?

ОШИБКА от LogCat:

01-13 02:28:08.392: ERROR/AndroidRuntime(2888): FATAL EXCEPTION: main
01-13 02:28:08.392: ERROR/AndroidRuntime(2888): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.s.android.test/com.s.android.test.MainActivity}: java.lang.ClassNotFoundException: com.s.android.test.MainActivity in loader dalvik.system.PathClassLoader[/data/app/com.s.android.test-2.apk]
01-13 02:28:08.392: ERROR/AndroidRuntime(2888):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1544)
01-13 02:28:08.392: ERROR/AndroidRuntime(2888):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1638)
01-13 02:28:08.392: ERROR/AndroidRuntime(2888):     at android.app.ActivityThread.access$1500(ActivityThread.java:117)
01-13 02:28:08.392: ERROR/AndroidRuntime(2888):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:928)
01-13 02:28:08.392: ERROR/AndroidRuntime(2888):     at android.os.Handler.dispatchMessage(Handler.java:99)
01-13 02:28:08.392: ERROR/AndroidRuntime(2888):     at android.os.Looper.loop(Looper.java:123)
01-13 02:28:08.392: ERROR/AndroidRuntime(2888):     at android.app.ActivityThread.main(ActivityThread.java:3647)
01-13 02:28:08.392: ERROR/AndroidRuntime(2888):     at java.lang.reflect.Method.invokeNative(Native Method)
01-13 02:28:08.392: ERROR/AndroidRuntime(2888):     at java.lang.reflect.Method.invoke(Method.java:507)
01-13 02:28:08.392: ERROR/AndroidRuntime(2888):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
01-13 02:28:08.392: ERROR/AndroidRuntime(2888):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
01-13 02:28:08.392: ERROR/AndroidRuntime(2888):     at dalvik.system.NativeStart.main(Native Method)
01-13 02:28:08.392: ERROR/AndroidRuntime(2888): Caused by: java.lang.ClassNotFoundException: com.s.android.test.MainActivity in loader dalvik.system.PathClassLoader[/data/app/com.s.android.test-2.apk]
01-13 02:28:08.392: ERROR/AndroidRuntime(2888):     at dalvik.system.PathClassLoader.findClass(PathClassLoader.java:240)
01-13 02:28:08.392: ERROR/AndroidRuntime(2888):     at java.lang.ClassLoader.loadClass(ClassLoader.java:551)
01-13 02:28:08.392: ERROR/AndroidRuntime(2888):     at java.lang.ClassLoader.loadClass(ClassLoader.java:511)
01-13 02:28:08.392: ERROR/AndroidRuntime(2888):     at android.app.Instrumentation.newActivity(Instrumentation.java:1021)
01-13 02:28:08.392: ERROR/AndroidRuntime(2888):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1536)
01-13 02:28:08.392: ERROR/AndroidRuntime(2888):     ... 11 more
01-13 02:28:08.407: WARN/ActivityManager(112):   Force finishing activity com.s.android.test/.MainActivity

Редактировать Эта ошибка случается с большинством начинающих, дело в том, что вы должны добавить все свои действия в файл манифеста.


спасибо Дэн Бреслау ... теперь выглядит лучше .. как это сделать?
Рахул

1
Простите, ребята ... извините за то, что потратили ваше время .. Я просто забыл добавить новый класс в файл манифеста ..
rahul

1
обновление всех моих инструментов (eclipse & sdk manager) исправило это для меня, а также добавило в проект библиотеку поддержки Android
Hayden Thring

У меня есть эта проблема, см. это stackoverflow.com/questions/30473270/…
DanialAbdi

Ответы:


137

Это проблема вашего намерения.

Пожалуйста, добавьте свой Activityв свой AndroidManifest.xml.

Если вы хотите сделать новое действие, вы должны зарегистрировать его в своем AndroidManifest.xml.


4
У меня есть класс, который не расширяет активность, просто содержит некоторые общие функции; но я все еще получаю это исключение; Зачем?
Манодж Кумар

В моем проекте говорится, что класс не является общедоступным, если посмотреть на Android: имя в XML-файле. Когда я добавляю public перед классом в основной деятельности, приложение работает без проблем. Weird.
Codebeat

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

6
Другой вариант заключается в том, что ваша активность находится в манифесте, но она объявлена ​​как abstract(я сделал эту ошибку во время рефакторинга, и сообщение об ошибке не сильно помогает).
Чехнология

59

Возможно, вы пытаетесь найти представление, до onCreate()которого является неправильным.

public class MainActivity extends Activity {

  ImageView mainImage = (ImageView) findViewById(R.id.imageViewMain); //incorrect

  @Override
  protected void onCreate(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
  }
  ...
}

2
Вуу, спасибо, мужик. Вы спасатель жизни. Это довольно глупо, но большое спасибо. Это преследовало меня уже неделю.
15:30

делал ту же ошибку;)
Sumit Jha

Та же ошибка и здесь. Спасибо
Пуджа

53

Есть еще один способ получить исключение java.lang.RuntimeException: невозможно создать экземпляр исключения компонента ComponentInfo, и это действие, которое вы пытаетесь запустить, является абстрактным . Я однажды совершил эту глупую ошибку, и ее очень легко не заметить.


13
Кроме того, активность должна быть публичной (это была моя ошибка).
Джек

Извините, что беспокою вас два года спустя, но мне было интересно, почему вы не можете начать абстрактную деятельность?
БенджаминФранклин

2
@BenjaminFranklin Абстрактный класс означает, что он не завершен, в нем отсутствуют части. Префикс класса с ключевым словом abstract означает, что его нельзя создать напрямую, а только через наследование: и другой класс, реализующий отсутствующие функции абстрактного класса.
Kit10

Я уже унаследовал абстрактный класс, но все еще не могу работать. Не могли бы вы объяснить подробнее?
Мохаммедсалим Шивани

53

В моем случае я забыл добавить библиотеку карт Google

<application>
    ....

    <uses-library android:name="com.google.android.maps" />
</application>

Кроме того, убедитесь, что вы не пропустили предыдущую точку перед активным путем

<activity android:name=".activities.MainActivity"/>

2
Спасибо, @Maragues !! Это была та же проблема! Вы решили мою проблему. :)
cmcromance

27

Образ

Это также происходит из-за этой проблемы. Я снял флажки с банками, которые нужно было экспортировать в apk, и произошло то же самое. Пожалуйста, отметьте банки, которые должно запускать ваше приложение.


Важно увидеть эту проблему и правильно попробовать каждый компонент зависимости. Например, в Android Studio (или Intellij IDEA) выберите правильную область для зависимостей (Предоставлено, Компилировать, ...). В моем случае измените Provided to Compile и работает нормально.
Даянрубень

15

Я тоже столкнулся с этой проблемой, но немного по-другому. Вот мой сценарий:

Приложение подробно:

  • Использование ActionBarSherlock в качестве библиотеки
  • Использование android-support-v4-r7-googlemaps.jar в библиотеке ActionBarSherlock, чтобы я мог использовать «фрагмент карты» в своем основном проекте
  • Добавил банку в путь сборки моего основного проекта
  • Включено <uses-library android:name="com.google.android.maps" />в манифесты как проекта библиотеки, так и моего основного проекта (это может быть необязательно в библиотеке?)
  • Манифест в основном проекте имел правильное определение активности и все соответствующие свойства
  • У меня не было абстрактной активности или каких-либо других ошибок, которые я видел в Переполнении стека, относящихся к этой проблеме.

Тем не менее, я все еще сталкивался с ошибкой, описанной в оригинальном сообщении, и не мог заставить ее уйти. Проблема, однако, была немного другой в одном отношении:

  • Это повлияло только на новую установку приложения на мое устройство. Каждый раз, когда приложение устанавливается впервые, я получаю сообщение об ошибке, которому предшествуют несколько «предупреждений» о: Не удается разрешить суперкласс FragmentActivity.
  • Эти предупреждения относятся к библиотеке ActionBarSherlock
  • Приложение будет принудительно закрываться и падать.
  • Если я немедленно перестроил и развернул приложение, оно работало нормально.
  • Единственный раз, когда он рухнул, был на совершенно новой установке. Если бы я удалил приложение, собрал и снова развернул его из Eclipse, оно зависло бы. Сборка / развертывание во второй раз, это будет работать нормально.

Как я это исправил:

  • В проекте библиотеки ActionBarSherlock я добавил android-support-v4-r7-googlemaps.jar в путь сборки
  • Один этот шаг не решил проблему

  • После добавления jar в путь сборки я изменил порядок на вкладке «Путь сборки Java»> «Порядок и экспорт» - я установил JAR для первого элемента в списке (это был последний после элементов / src и / gen ).

  • Затем я перестроил и снова развернул приложение на моем устройстве - оно работало, как и ожидалось, при новой установке. Просто чтобы быть уверенным, я удалил это снова 2-3 раза и переустановил - все еще работал как ожидалось.

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


Спасибо! Это сработало для меня, когда я получил эту проблему при использовании googles admob sdk пример "adcatalog" и получал эту ошибку. Важным примечанием является установка флажков рядом с библиотеками. В моем случае поддержка & admobsdk банок.
Jsmars

14

Это может не относиться к актуальному вопросу, но в моем случае я попытался реализовать Kotlin и не учел apply plugin: 'kotlin-android'. Ошибка произошла из-за того, что не удалось распознать MainActivity в виде файла .kt.

Надеюсь, это кому-нибудь поможет.


1
Также добавьте classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$KOTLIN_VERSIONв основной build.gradle
Раджкиран

11

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

SQLiteDatabase db = openOrCreateDatabase("DB", MODE_PRIVATE, null); //trying to perform function where you can only set up objects, primitives, etc

@Override
public void onCreate(Bundle savedInstanceState) {
....
}

а не это:

SQLiteDatabase db;

@Override
public void onCreate(Bundle savedInstanceState) {
db = openOrCreateDatabase("DB", MODE_PRIVATE, null);
....
}

1
Огромная Помощь. Исправил мои проблемы и привел меня к созданию моего первого полнофункционального приложения для Android
TheUnCola

7

Я избавилась от этой проблемы, удалив Binи Genпапки из проекта (который автоматически вернуться , когда проект будет строить) , а затем очистки проекта от -> Меню -> Project -> чистый.

Спасибо.


6

В моем случае я не установил setContentView(R.layout.main);

Если вы создаете новый класс, не забудьте установить его в onCreate(Bundle savedInstanceState)методе on .

Я сделал эту глупую ошибку несколько раз.


6

Просто очистите ваш рабочий проект или перезапустите затмение. Затем запустите свой проект. это сработает.


Так много раз это случалось ... Теперь он не может разрешить файл IADL, который, вероятно, является причиной проблемы, а eclipse компилируется на основе старых файлов ... ооочень не забудьте очистить, перезапустить и скомпилировать детей ... .
Хантер-Orionnoir

6

Для меня моя строка пакета AndroidManifest.xmlбыла неправильной (скопировано из учебника). Убедитесь, что строка пакета в этом файле совпадает со строкой вашего основного действия, например

 package="com.example.app"

Самый простой способ сделать это - открыть файл AndroidManifest.xml на вкладке «Манифест» и ввести его в текстовое поле рядом с «Пакет» или использовать кнопку «Обзор».

Кроме того, строка пакета для моей деятельности была неправильной, например

<activity android:name="com.example.app.MainActivity" android:label="@string/app_name">

Я (тупо) получил ту же ошибку несколько недель спустя, когда я переименовал имя пакета. Если вы сделаете это, убедитесь, что вы AndroidManifest.xmlтоже обновили файл.


5

Хорошо, я довольно опытный на iPhone, но плохо знаком с Android. Я получил эту проблему, когда у меня было:

Button infoButton = (Button)findViewById(R.id.InfoButton);

эта строка кода выше:

@Override
public void onCreate (Bundle savedInstanceState) {
}

Может быть, я лишен сна: P


2
Я также лишен сна
Оз Мейт,

3

Я недавно столкнулся с этим при новой переустановке Eclipse. Оказывается, мой уровень соответствия компилятору был установлен на Java 1.7, а проект требовал 1.6.

В Eclipse: Проект -> Свойства -> Компилятор Java -> Соответствие JDK


2

Получил эту проблему и исправил ее, установив свойство «режим запуска» действия.


2

Другой причиной этой проблемы может быть отсутствие библиотеки.

Зайдите в Свойства -> Android и убедитесь, что вы правильно добавили библиотеки


1
Также убедитесь, что у добавленных библиотек есть галочка напротив них в Свойствах проекта -> Путь сборки Java -> Порядок и экспорт
Фил

2

У меня была та же проблема, но я объявил свою активность в файле манифеста с правильным именем.

Моя проблема заключалась в том, что мне не нужно было импортировать сторонние библиотеки в папку «libs», и мне нужно было ссылаться на них в моем проекте (щелчок правой кнопкой мыши, свойства, Java Build Path, Libraries, Add Jar ...).


2

Это может произойти, если ваш класс активности находится в пакете по умолчанию. Я исправил это, переместив класс активности в новый пакет. и изменение файла manifest.xml

перед

activity android:name=".MainActivity" 

после

activity android:name="new_package.MainActivity"

Спасибо. это было это.
Стефан

2

В моем случае я пытался инициализировать компоненты (UI) еще до onCreate вызова Activity.

Убедитесь, что ваши компоненты пользовательского интерфейса инициализированы / связаны в onCreateметоде послеsetContentView

NB: Это моя первая ошибка при изучении программирования на Android.


2

Для меня это отличалось от любого из вышеперечисленного,

Деятельность была объявлена ​​абстрактной, поэтому выдает ошибку. Как только это удалило, это работало.

Ранее

     public abstract class SampleActivity extends AppcompatActivity{
     }

После удаления

     public class SampleActivity extends AppcompatActivity{
     }

1

Это случается со мной довольно часто при использовании NDK. Я обнаружил, что мне необходимо делать «Очистку» в Eclipse после каждого моего выполнения ndk-build. Надеюсь, это кому-нибудь поможет :)


1

Эта ошибка также возникает, когда вы используете, ActionBarActivityно назначен не AppCompatстиль.

Чтобы это исправить, просто установите родительский стиль вашего приложения в Theme.AppCompatтакой:

<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light">
    <!-- Customize your theme here. -->
</style>

Bom trabalho @Ostkontentitan! funcionou para mim, obrigado.
Эмерсон Барселлос

1

Щелкните правой кнопкой мыши по проекту> свойства> android> и попробуйте другую версию android, которую раньше я делал с android 4.4, затем я перешел на android 4.3 и все заработало!


1

У меня была та же проблема (Невозможно создать экземпляр Activity):

Первая причина:

Я получал доступ

Camera mCamera;
Camera.Parameters params = mCamera.getParameters();

перед

mCamera = Camera.open();

Итак, правильный способ - открыть сначала камеру, а затем получить доступ к параметрам.

ВТОРАЯ причина: объявите свою деятельность в файле манифеста

<activity android:name=".activities.MainActivity"/>

ТРЕТЬЯ причина: объявите разрешение камеры в файле манифеста.

<uses-feature android:name="android.hardware.Camera"></uses-feature>
<uses-permission android:name="android.permission.CAMERA" />

Надеюсь это поможет


1

В моем случае я пытался встроить Facebook SDK, и у меня был неправильный идентификатор приложения ; таким образом ошибка выскакивала. В вашем файле манифеста у вас должны быть правильные метаданные:

<meta-data
android:name="com.facebook.sdk.ApplicationId"
android:value="@string/facebook_app_id" />

1

Если у вас установлены Android Studio 2.3.3 и Android Studio 3.0.0, переключение между двумя программами для разработки приведет к этой ошибке. Это связано с тем, что существуют ситуации, когда классы, поддерживаемые в одной программе, не поддерживаются другой, и наоборот. Важно поддерживать согласованность того, какая версия Android Studio используется для разработки проекта.


1

Как следует djjeckиз комментария в этом ответе, я пропустил publicмодификатор для своего класса.

Так должно быть

public class MyActivity extends AppCompatActivity {

Это может помочь таким, как я.


1

Я испробовал все вышеперечисленное решение, но ничего не работает для меня. после того, как я просто добавил extendактивность вместоAppCompatActivity и работает нормально.

используемый

public class MainActivity extends Activity  

вместо того

public class MainActivity extends AppCompatActivity 

я не знаю, в чем дело.


0

Это случилось со мной, когда я попытался запустить Activityна 2.2, который использовал импорт из Honeycomb, недоступный в более старых версиях Android и не включенный в пакет поддержки v4.


0

Ваша новая активность добавить AndroidManifest.xmlлайк".NewActivity"

 </activity>        
    <activity android:name=".NewActivity" />
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.