java.lang.RuntimeException: nie można utworzyć wystąpienia działania ComponentInfo

151

Próbowałem uruchomić przykładowy kod. Podczas uruchamiania aplikacji w emulatorze Androida 1.5 wystąpiły te błędy… Ktoś ma jakąś wskazówkę…?

BŁĄD z 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

Edytuj Ten błąd występuje u większości początkujących, chodzi o to, że musisz dodać wszystkie swoje działania do pliku manifestu.

rahul
źródło
dzięki Dan Breslau… Teraz wygląda lepiej… jak to zrobić?
rahul
1
Przepraszam ... przepraszam za marnowanie czasu ... po prostu zapomniałem dodać nową klasę do pliku manifestu ..
rahul
1
aktualizacja wszystkich moich narzędzi (menedżer eclipse i sdk) naprawiła to za mnie, a także dodanie biblioteki obsługi Androida do projektu
Hayden Thring
mam ten problem, zobacz ten stackoverflow.com/questions/30473270/…
DanialAbdi

Odpowiedzi:

137

To jest problem twojej intencji.

Dodaj swój Activityw swoim AndroidManifest.xml.

Chcąc rozpocząć nową działalność, należy zarejestrować ją w swoim AndroidManifest.xml.

Tanmay Mandal
źródło
4
Mam klasę, która nie rozszerza aktywności, zawiera tylko kilka wspólnych funkcji; ale nadal mam ten wyjątek; czemu?
Manoj Kumar,
W moim projekcie jest napisane, że klasa nie jest publiczna, gdy patrzy się na android: name w pliku xml. Kiedy dodam publiczne przed zajęciami w głównym działaniu, aplikacja działa bez problemów. Dziwne.
Codebeat
miałem ten problem w natywnej aplikacji, którą tworzyłem .. dodałem inną metodę w klasie aktywności i zacząłem otrzymywać ten błąd .. dla mnie czysta + przebudowa rozwiązała go ..
ashishsony
6
Inną opcją jest to, że twoja aktywność jest w manifeście, ale jest zadeklarowana jako abstract(popełniłem ten błąd podczas refaktoryzacji i komunikat o błędzie nie pomaga).
Czechnology
59

Być może próbujesz znaleźć widok, przed onCreate()którym jest nieprawidłowy.

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);
  }
  ...
}
SMUsamaShah
źródło
2
Wooo, dzięki stary. Ratujesz życie. To dość głupie, ale wielkie dzięki. Prześladował mnie już od tygodnia.
meain
robił ten sam błąd;)
Sumit Jha
Ten sam błąd również tutaj. Dzięki
Pooja
53

Istnieje inny sposób uzyskania wyjątku java.lang.RuntimeException: Nie można utworzyć instancji działania Wyjątek ComponentInfo i jest to działanie, które próbujesz uruchomić, jest abstrakcyjne . Raz popełniłem ten głupi błąd i bardzo łatwo go przeoczyć.

Kevin
źródło
13
Ponadto działanie musi być publiczne (to był mój błąd).
djjeck
Przepraszam, że przeszkadzam ci dwa lata później, ale zastanawiałem się, dlaczego nie możesz rozpocząć abstrakcyjnej działalności?
BenjaminFranklin
2
@BenjaminFranklin Klasa abstrakcyjna oznacza, że ​​nie jest kompletna, brakuje jej części. Przedrostek klasy słowem kluczowym abstract oznacza, że ​​nie można jej utworzyć bezpośrednio, ale tylko poprzez dziedziczenie: i inną klasę implementującą brakujące funkcje klasy abstrakcyjnej.
Kit10
Odziedziczyłem już klasę abstrakcyjną, ale nadal nie mogę pracować. Czy mógłbyś wyjaśnić dalej?
Mohammedsalim Shivani,
53

W moim przypadku zapomniałem dodać bibliotekę map Google

<application>
    ....

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

Sprawdź również, czy nie brakuje poprzedniej kropki przed ścieżką aktywności

<activity android:name=".activities.MainActivity"/>
Maragues
źródło
2
Dziękuję @Maragues !! To był ten sam problem! Rozwiązałeś mój problem. :)
cmcromance
27

Wizerunek

Dzieje się tak również z powodu tego problemu. Odznaczyłem słoiki, które trzeba było wyeksportować do apk i stało się to samo. Zaznacz słoiki, które ma działać Twoja aplikacja.

meowmeowbeans
źródło
Ważne jest, aby zobaczyć ten problem i poprawnie wypróbować każdy składnik zależności. Na przykład w Android Studio (lub Intellij IDEA) wybierz poprawny zakres dla zależności (Provided, Compile, ...). W moim przypadku zmień Provided to Compile i działa dobrze.
dayanruben
15

Z tym problemem też się spotkałem, ale w nieco inny sposób. Oto mój scenariusz:

Szczegóły aplikacji:

  • Używanie ActionBarSherlock jako biblioteki
  • Używanie android-support-v4-r7-googlemaps.jar w bibliotece ActionBarSherlock, aby móc użyć „fragmentu mapy” w moim głównym projekcie
  • Dodano słoik do ścieżki kompilacji mojego głównego projektu
  • Zawarte <uses-library android:name="com.google.android.maps" />w manifestach zarówno projektu biblioteki, jak i mojego projektu głównego (może to nie być konieczne w bibliotece?)
  • Manifest w projekcie głównym miał odpowiednią definicję działania i wszystkie odpowiednie właściwości
  • Nie miałem abstrakcyjnej aktywności ani żadnej z innych pułapek, które widziałem w Stack Overflow, dotyczących tego problemu.

Jednak nadal napotkałem błąd opisany w oryginalnym poście i nie mogłem go usunąć. Problem był jednak nieco inny pod jednym względem:

  • Dotyczyło to tylko nowej instalacji aplikacji na moim urządzeniu. Za każdym razem, gdy aplikacja była instalowana po raz pierwszy, otrzymywałem błąd poprzedzony kilkoma „ostrzeżeniami” typu: Nie można rozpoznać nadklasy FragmentActivity
  • Te ostrzeżenia sięgają do biblioteki ActionBarSherlock
  • Aplikacja wymusiłaby zamknięcie i awarię.
  • Jeśli natychmiast odbudowałem i ponownie wdrożyłem aplikację, działało dobrze.
  • Awaria nastąpiła tylko na całkowicie nowej instalacji. Gdybym odinstalował aplikację, skompilował i ponownie wdrożył z Eclipse, zawiesiłby się. Zbuduj / wdróż po raz drugi, będzie dobrze.

Jak to naprawiłem:

  • W projekcie biblioteki ActionBarSherlock dodałem plik android-support-v4-r7-googlemaps.jar do ścieżki kompilacji
  • Sam ten krok nie rozwiązał problemu

  • Po dodaniu słoika do ścieżki kompilacji zmieniłem kolejność na karcie Ścieżka budowania Java> Zamów i eksport - ustawiłem JAR na pierwszy element na liście (był to ostatni po elementach / src i / gen ).

  • Następnie odbudowałem i ponownie wdrożyłem aplikację na moim urządzeniu - działała zgodnie z oczekiwaniami po nowej instalacji. Dla pewności odinstalowałem go ponownie 2-3 razy i ponownie zainstalowałem - nadal działał zgodnie z oczekiwaniami.

Może to być całkowity błąd początkującego, ale spędziłem sporo czasu na przekopywaniu się przez posty i mój kod, aby to rozgryźć, więc mam nadzieję, że może to być pomocne dla kogoś innego. Może nie rozwiązać wszystkich sytuacji, ale w tym konkretnym przypadku okazało się, że jest to rozwiązanie mojego problemu.

Kyle
źródło
Dzięki! To zadziałało dla mnie, gdy napotkałem ten problem podczas używania googles admob sdk przykład „adcatalog” i otrzymywałem ten błąd. Ważną uwagą jest zaznaczenie pól wyboru obok bibliotek. W moim przypadku słoiki support & admobsdk.
jsmars
14

To może nie pasować do rzeczywistego pytania, ale w moim przypadku próbowałem wdrożyć Kotlin i pominąłem apply plugin: 'kotlin-android' . Błąd wystąpił, ponieważ nie mógł rozpoznać MainActivity jako pliku .kt.

Mam nadzieję, że to komuś pomoże.

Muz
źródło
1
Dodaj także classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$KOTLIN_VERSIONdo main build.gradle
Rajkiran
11

Ten błąd może być również ostateczną oznaką głupiej pomyłki (jak wtedy, gdy mam na myśli kaszel, na przykład mój przyjaciel, który pokazał mi kiedyś swój kod), gdy próbują wykonać kod poza metodą, taką jak próba zrobienia tego :

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) {
....
}

zamiast tego:

SQLiteDatabase db;

@Override
public void onCreate(Bundle savedInstanceState) {
db = openOrCreateDatabase("DB", MODE_PRIVATE, null);
....
}
ColossalChris
źródło
1
Ogromna pomoc. Naprawiłem moje problemy i doprowadził mnie do stworzenia mojej pierwszej w pełni funkcjonalnej aplikacji na Androida
TheUnCola.
7

Pozbyłem się tego problemu, usuwając folder Bini Genz projektu (który automatycznie wraca, gdy projekt się buduje), a następnie czyszcząc projekt z -> Menu -> Projekt -> wyczyść.

Dzięki.

Jagdeep Singh
źródło
6

W moim przypadku nie ustawiłem setContentView(R.layout.main);

Jeśli tworzysz nową klasę, nie myl się, aby ustawić to w onCreate(Bundle savedInstanceState)metodzie.

Zrobiłem ten głupi błąd kilka razy.

saji159
źródło
6

Po prostu wyczyść działający projekt lub uruchom ponownie zaćmienie. Następnie uruchom swój projekt. to będzie działać.

Emran Hamza
źródło
Tak wiele razy to się zdarzyło ... Teraz nie można rozwiązać pliku IADL, który prawdopodobnie jest źródłem problemu, a eclipse kompilowało się na podstawie starych plików ... więc pamiętaj, aby wyczyścić, zrestartować i skompilować dzieci ... ,
Hunter-Orionnoir,
6

Dla mnie ciąg mojego pakietu AndroidManifest.xmlbył nieprawidłowy (skopiowany z samouczka). Upewnij się, że ciąg znaków pakietu w tym pliku jest taki sam, jak w miejscu, w którym znajduje się Twoja główna aktywność, np

 package="com.example.app"

Łatwym sposobem na to jest otwarcie pliku AndroidManifest.xml na karcie „Manifest” i wpisanie go w polu tekstowym obok opcji Pakiet lub użycie przycisku Przeglądaj.

Również ciąg znaków pakietu dla mojej aktywności był nieprawidłowy, np

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

Otrzymałem (głupio) ten sam błąd kilka tygodni później, kiedy zmieniłem nazwę mojego pakietu. Jeśli to zrobisz, upewnij się, że aktualizujesz również AndroidManifest.xmlplik.

satyrFrost
źródło
5

Ok, mam dość duże doświadczenie na iPhonie, ale nowi na Androidzie. Mam ten problem, gdy miałem:

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

ten wiersz kodu powyżej:

@Override
public void onCreate (Bundle savedInstanceState) {
}

Może jestem pozbawiony snu: P

Widzę
źródło
2
Ja też jestem pozbawiony snu
Oz Mayt
3

Niedawno spotkałem się z tym podczas ponownej instalacji Eclipse. Okazuje się, że mój poziom zgodności kompilatora został ustawiony na Java 1.7, a projekt wymagał 1.6.

W Eclipse: Projekt -> Właściwości -> Kompilator Java -> Zgodność z JDK

Tapirboy
źródło
2

Mam ten problem i naprawiłem go, ustawiając właściwość „tryb uruchamiania” działania.

Zorglube
źródło
2

Inną przyczyną tego problemu może być brakująca biblioteka.

Przejdź do Właściwości -> Android i sprawdź, czy poprawnie dodajesz biblioteki

ayalcinkaya
źródło
1
Sprawdź również, czy dodane biblioteki mają znacznik wyboru we Właściwościach projektu -> Ścieżka budowania Java -> Zamów i eksportuj
Phil.
2

Miałem ten sam problem, ale moja aktywność została zadeklarowana w pliku Manifest z poprawną nazwą.

Mój problem polegał na tym, że nie musiałem importować bibliotek innych firm do folderu „libs” i potrzebowałem odniesienia do nich w moim projekcie (kliknięcie prawym przyciskiem myszy, właściwości, ścieżka budowania Java, biblioteki, dodaj słoik ...).

Maria Mercedes Wyss Alvarez
źródło
2

Może się tak zdarzyć, jeśli klasa aktywności znajduje się w domyślnym pakiecie. Naprawiłem to, przenosząc klasę aktywności do nowego pakietu. i zmieniając plik manifest.xml

przed

activity android:name=".MainActivity" 

po

activity android:name="new_package.MainActivity"
Satthy
źródło
Dzięki. to było to.
Stephane
2

W moim przypadku próbowałem zainicjować komponenty (UI) jeszcze przed onCreatewywołaniem działania.

Upewnij się, że składniki interfejsu użytkownika są zainicjowane / połączone w onCreatemetodzie posetContentView

NB: To mój pierwszy błąd podczas nauki programowania na Androida.

Anup
źródło
2

Dla mnie to było inne niż którekolwiek z powyższych,

Czynność została uznana za abstrakcyjną, dlatego podając błąd. Po usunięciu zadziałało.

Wcześniej

     public abstract class SampleActivity extends AppcompatActivity{
     }

Po usunięciu

     public class SampleActivity extends AppcompatActivity{
     }
Thriveni
źródło
1

Zdarza mi się to dość często podczas korzystania z NDK. Zauważyłem, że konieczne jest wykonanie „Czyszczenia” w Eclipse po każdym wykonaniu ndk-build. Mam nadzieję, że to pomoże każdemu :)

kizzx2
źródło
1

Ten błąd występuje również, gdy używasz, ActionBarActivityale przypisano AppCompatstyl inny niż .

Aby to naprawić, po prostu ustaw rodzica w stylu aplikacji na Theme.AppCompattaki:

<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light">
    <!-- Customize your theme here. -->
</style>
Ostkontentitan
źródło
Bom trabalho @Ostkontentitan! funcionou para mim, obrigado.
Emerson Barcellos
1

Kliknij prawym przyciskiem myszy projekt> właściwości> android> i spróbuj z inną wersją Androida, wcześniej robiłem z Androidem 4.4, a potem zmieniłem na Androida 4.3 i zadziałało!

nikhilgotan
źródło
1

Miałem ten sam problem (nie można utworzyć wystąpienia działania):

PIERWSZY powód:

Miałem dostęp

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

przed

mCamera = Camera.open();

Tak więc, należy najpierw otworzyć kamerę, a następnie uzyskać dostęp do parametrów.

DRUGI powód: zadeklaruj swoją aktywność w pliku manifestu

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

TRZECI powód: zadeklaruj uprawnienia do aparatu w pliku manifestu.

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

Mam nadzieję że to pomoże

Sdembla
źródło
1

W moim przypadku próbowałem osadzić Facebook SDK i miałem zły identyfikator aplikacji ; więc błąd się pojawiał. W swoim pliku manifestu powinieneś mieć odpowiednie metadane:

<meta-data
android:name="com.facebook.sdk.ApplicationId"
android:value="@string/facebook_app_id" />
Menelaos Kotsollaris
źródło
1

Jeśli masz zainstalowany Android Studio 2.3.3 i Android Studio 3.0.0, przełączanie między dwoma programami do programowania spowoduje ten błąd. Dzieje się tak, ponieważ istnieją sytuacje, w których klasy obsługiwane w jednym programie nie są obsługiwane przez drugi i odwrotnie. Ważne jest, aby zachować spójność, w jakiej wersji Android Studio jest używana do tworzenia projektu.

heksykul
źródło
1

Jak zasugerował djjeckkomentarz w tej odpowiedzi, nie mogłem wstawićpublic modyfikatora dla mojej klasy.

Powinno być

public class MyActivity extends AppCompatActivity {

Może pomóc niektórym takim jak ja.

Shylendra Madda
źródło
1

Wypróbowałem wszystkie powyższe rozwiązania, ale nic dla mnie nie działa. po prostu dodaję extendaktywność zamiast AppCompatActivityi działa dobrze.

używany

public class MainActivity extends Activity  

zamiast

public class MainActivity extends AppCompatActivity 

nie wiem, jaki to był prawdziwy problem.

Sagar Jethva
źródło
0

Zdarzyło mi się to, gdy próbowałem uruchomić Activityna 2.2, który używał importu z Honeycomb, który nie jest dostępny w starszych wersjach Androida i nie jest również uwzględniony w pakiecie wsparcia v4.

pqn
źródło
0

Twoja nowa aktywność dodaj AndroidManifest.xmlpolubienie".NewActivity"

 </activity>        
    <activity android:name=".NewActivity" />
NagarjunaReddy
źródło