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

Редагувати Ця помилка трапляється у більшості початківців, річ у тому, що ви повинні додати всі свої дії у файл Manifest.


дякую Ден Бреслау ... Зараз виглядає краще ... як це зробити?
rahul

1
Вибачте, хлопці ... вибачте, що відмовилися від вашого часу .. Я просто забув додати новий клас до файлу Manifest ..
rahul

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

я маю цю проблему, зверніться до цієї stackoverflow.com/questions/30473270 / ...
DanialAbdi

Відповіді:


137

Це проблема вашого наміру.

Будь ласка, додайте своє Activity своє AndroidManifest.xml .

Коли ви хочете зробити нову діяльність, слід зареєструвати її у своєму AndroidManifest.xml.


4
У мене клас, який не розширює активність, просто містить декілька загальних фукцій; але я все одно отримую цей виняток; чому?
Маной Кумар

У моєму проекті йдеться про те, що клас не є загальнодоступним при перегляді андроїда: name у файлі xml. Коли я додаю публікацію перед уроком в основній діяльності, додаток працює без проблем. Дивно.
Codebeat

У мене була ця проблема в нативній програмі, яку я розробляв .. Я додав ще один метод у класі активності, і я почав отримувати цю помилку .. для мене це чисте + відновлення вирішило ..
ashishsony

6
Інший варіант полягає в тому, що ваша активність знаходиться в маніфесті, але вона оголошується як abstract(я зробив цю помилку під час рефакторингу, і повідомлення про помилку мало допомагає).
Czechnology

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
Ву, дякую людино. Ви рятувальник життя. Це досить нерозумно, але спасибі велике. Мене вже тиждень переслідує.
meain

робив ту саму помилку;)
Суміт Джа

Така ж помилка і тут. Дякую
Pooja

53

Існує ще один спосіб отримати java.lang.RuntimeException: Не вдається інстанціювати виняток ComponentInfo у діяльності, і ця діяльність, яку ви намагаєтеся почати, є абстрактною . Я зробив цю дурну помилку один раз, і її дуже легко не помітити.


13
Також Діяльність повинна бути публічною (це була моя помилка).
djjeck

Вибачте, що турбуєте вас через два роки, але мені було цікаво, чому ви не можете розпочати абстрактну діяльність?
БенджамінФранклін

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

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

53

У моєму випадку я забув додати бібліотеку Google Maps

<application>
    ....

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

Також переконайтеся, що ви не пропустили попередню крапку перед шляхом діяльності

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

2
Дякую, @Maragues !! Це було те саме питання! Ви вирішили мою проблему. :)
cmcromance

27

Зображення

Це трапляється і через це питання. Я відміняв банки, які потрібно було експортувати в apk, і те саме сталося. Поставте галочки на баночки, які потрібно запустити вашому додатку.


Важливо розглянути це питання та спробувати кожен компонент залежності правильно. Наприклад, на Android Studio (або Intellij IDEA) виберіть правильний діапазон для залежностей (надається, компілюйте, ...). У моєму випадку змініть Надано на Збір і працює чудово.
dayanruben

15

Я також стикався з цією проблемою, але дещо по-іншому. Ось мій сценарій:

Докладно про додаток:

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

Однак я все-таки зіткнувся з помилкою, описаною в оригінальній публікації, і не зміг її усунути. Однак проблема була дещо іншою:

  • Це вплинуло лише на нову інсталяцію програми на мій пристрій. Кожного разу, коли додаток встановлено вперше, я отримаю помилку, перед якою перебувають кілька "попереджень": Неможливо вирішити надклас FragmentActivity
  • Ці попередження відносяться до бібліотеки ActionBarSherlock
  • Додаток змусить закрити і вийти з ладу.
  • Якщо я негайно перевлаштував і повторно застосував додаток, він спрацював чудово.
  • Єдиний раз, коли він зазнав аварії, був повністю свіжим. Якби я видалив додаток, побудував і знову розгорнув його з Eclipse, він би вийшов з ладу. Створюйте / розгортайте вдруге, це буде добре.

Як я це виправив:

  • У проекті бібліотеки ActionBarSherlock я додав андроїд-підтримку-v4-r7-googlemaps.jar до шляху збирання
  • Сам цей крок не усунув проблему

  • Після додавання банку до шляху збирання я змінив порядок на вкладці Java Build Path> Order and Export - я встановив JAR на перший елемент у списку (він був останнім після елементів / src та / gen ).

  • Потім я відновив і повторно застосував додаток на свій пристрій - він працював, як очікувалося, у новому встановленні. Напевне, я видалив її ще 2-3 рази і перевстановив - все ще працював, як очікувалося.

Це може бути тотальною помилкою новачка, але я витратив досить довгий час, перекопуючи пости та мій код, щоб зрозуміти це, тож сподіваюся, він може бути корисним комусь іншому. Може не виправити всіх ситуацій, але в цьому конкретному випадку це вирішило мою проблему.


Дякую! Це працювало для мене, коли у мене виникла ця проблема, коли я використовував googles admob sdk, наприклад, "adtatalog" і отримував цю помилку. Важлива примітка - встановити прапорці біля бібліотек. У моєму випадку банки з підтримкою & admobsdk.
jsmars

14

Це може не відповідати актуальному питанню, але в моєму випадку я спробував реалізувати Котлін і вийшов з нього apply plugin: 'kotlin-android' . Помилка сталася через те, що вона не могла розпізнати MainActivity як файл .kt.

Сподіваюся, це комусь допоможе.


1
Також додайте classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$KOTLIN_VERSIONв main 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папку з проекту (яка автоматично повертається, коли проект буде створений), а потім очистивши проект з -> Меню -> Проект -> Очистити.

Дякую.


6

У моєму випадку я не встановив setContentView(R.layout.main);

Якщо ви створюєте новий клас, не запускайте його, щоб увімкнути цей onCreate(Bundle savedInstanceState)метод.

Я зробив цю дурну помилку кілька разів.


6

Просто очистіть свій робочий проект або перезапустіть затемнення. Потім запустіть проект. це спрацює.


Так багато разів це траплялося ... Тепер він не може вирішити файл IADL, який, мабуть, є коренем проблеми, і затемнення збиралося на основі старих файлів ... так що пам'ятайте, чистити, перезавантажувати та компілювати дітей .. .
Мисливець-Оріоннур

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 Build Path -> Порядок та експорт
Phil

2

У мене була така ж проблема, але я маю свою активність оголосити у файлі Manifest з правильним ім'ям.

Моя проблема полягала в тому, що мені не довелося імпортувати сторонні бібліотеки у папку "libs", і мені потрібно було вказати їх у своєму проекті (клацніть правою кнопкою миші, властивості, шлях збірки Java, бібліотеки, Додати Jar ...).


2

Це може статися, якщо ваш клас активності знаходиться в пакеті за замовчуванням. Я виправив це, перемістивши клас активності в новий пакет. та зміна маніфесту.xml

раніше

activity android:name=".MainActivity" 

після

activity android:name="new_package.MainActivity"

Дякую. це було все.
Стефан

2

У моєму випадку я намагався ініціалізувати компоненти (інтерфейс користувача) ще до onCreateвиклику активності.

Переконайтесь, що ваші компоненти інтерфейсу ініціалізовані / пов'язані в 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.
Emerson Barcellos

1

Клацніть правою кнопкою миші на проект> властивості> android> і спробуйте з іншою версією Android раніше, ніж я робив з Android 4.4, потім я змінив на android 4.3, і він працював!


1

У мене була та сама проблема (Неможливо активізувати активність):

ПЕРША причина:

Я звертався

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

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

<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.