java.lang.RuntimeException: Não foi possível instanciar a atividade ComponentInfo

151

Eu estava tentando executar um código de exemplo Ao iniciar o aplicativo no emulador do Android 1.5, eu recebi esses erros .... Alguém tem alguma dica ..?

ERRO do 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

Editar Esse erro ocorre com a maioria dos iniciantes, mas você precisa adicionar todas as suas atividades no arquivo Manifest.

rahul
fonte
obrigado Dan Breslau ... Parece melhor agora .. como fazer isso?
rahul
1
Sorry guys ... pena de waisting seu time..I só esqueceu de adicionar a nova classe para o arquivo de manifesto ..
rahul
1
atualizar todas as minhas ferramentas (eclipse & gerente SDK) fixos para mim, bem como a adição de biblioteca de suporte android para projeto
Hayden Thring
Eu tenho esse problema, consulte este stackoverflow.com/questions/30473270/… #
DanialAbdi

Respostas:

137

É um problema de sua intenção.

Por favor, adicione o seu Activityno seu AndroidManifest.xml.

Quando você quiser fazer uma nova atividade, registre-a no seu AndroidManifest.xml.

Tanmay Mandal
fonte
4
Eu tenho uma classe que não estende a atividade, apenas contém algumas funções comuns; mas ainda recebo essa exceção; porque?
Manoj Kumar
No meu projeto, ele diz que a classe não é pública quando se olha para o android: name no arquivo xml. Quando adiciono público antes da aula na atividade principal, o aplicativo é executado sem problemas. Esquisito.
Codebeat
Eu tive esse problema em um aplicativo nativo que eu estava desenvolvendo .. eu adicionei um outro método na classe de actividade, e eu comecei a receber esse erro .. para mim um ambiente limpo + reconstruir resolvido ..
ashishsony
6
Outra opção é que sua atividade esteja no manifesto, mas ela é declarada como abstract(cometi esse erro durante a refatoração e a mensagem de erro não está ajudando muito).
Czechnology
59

Você pode estar tentando encontrar a vista anterior onCreate()que está incorreta.

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
fonte
2
Wooo, obrigado cara. Você é um salva-vidas. É muito bobo, mas muito obrigado. Fazia uma semana que me assombrava.
meain
estava cometendo o mesmo erro;)
Sumit Jha
O mesmo erro aqui também. Obrigado
Pooja
53

Há outra maneira de obter uma java.lang.RuntimeException: Não é possível instanciar a exceção ComponentInfo da atividade e essa é a atividade que você está tentando iniciar é abstrata . Cometi esse erro estúpido uma vez e é muito fácil ignorar.

Kevin
fonte
13
Além disso, a atividade deve ser pública (esse foi meu erro).
djjeck
Desculpe incomodá-lo dois anos depois, mas fiquei pensando por que você não pode iniciar uma atividade abstrata?
perfil
2
@BenjaminFranklin Uma classe abstrata significa que não está completa, estão faltando partes. Prefixar uma classe com a palavra-chave abstract significa que ela não pode ser instanciada diretamente, mas apenas por herança: e outra classe implementando os recursos ausentes da classe abstract.
precisa saber é o seguinte
Eu já herdei a classe abstrata, mas ainda não consegui trabalhar. Você poderia explicar mais?
Mohammedsalim Shivani /
53

No meu caso, esqueci de adicionar a biblioteca do Google Maps

<application>
    ....

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

Além disso, verifique se não está faltando o ponto anterior antes do caminho da atividade

<activity android:name=".activities.MainActivity"/>
Maragues
fonte
2
Obrigado, @Maragues !! Foi o mesmo problema! Você resolveu o meu problema. :)
cmcromance 26/10/12
27

Imagem

Isso também acontece por causa desse problema. Desmarquei os frascos que precisavam ser exportados para o apk e aconteceu a mesma coisa. Marque os frascos que seu aplicativo precisa executar.

meowmeowbeans
fonte
É importante ver esse problema e tente cada componente de dependência corretamente. Por exemplo, no Android Studio (ou Intellij IDEA), selecione o escopo correto para as dependências (Fornecido, Compilar, ...). No meu caso, altere Fornecido para Compilar e funciona bem.
precisa saber é o seguinte
15

Também encontrei esse problema, mas de uma maneira um pouco diferente. Aqui estava o meu cenário:

Detalhe da aplicação:

  • Usando o ActionBarSherlock como uma biblioteca
  • Usando android-support-v4-r7-googlemaps.jar na biblioteca ActionBarSherlock para que eu pudesse usar um "fragmento de mapa" no meu projeto principal
  • Adicionado o jar ao caminho de construção do meu projeto principal
  • Incluído <uses-library android:name="com.google.android.maps" />nos manifestos do projeto da biblioteca e do meu projeto principal (isso pode não ser necessário na biblioteca?)
  • O manifesto no projeto primário tinha a definição de atividade adequada e todas as propriedades apropriadas
  • Eu não tive uma atividade abstrata ou nenhuma das outras dicas que eu vi no Stack Overflow referente a esse problema.

No entanto, ainda encontrei o erro descrito na postagem original e não consegui fazê-lo desaparecer. O problema, porém, era um pouco diferente em um aspecto:

  • Isso afetou apenas uma nova instalação do aplicativo no meu dispositivo. Sempre que o aplicativo fosse instalado pela primeira vez, eu receberia o erro precedido por vários "avisos" de: Não é possível resolver a superclasse de FragmentActivity
  • Esses avisos foram rastreados até a biblioteca ActionBarSherlock
  • O aplicativo forçaria o fechamento e o travamento.
  • Se eu recompensei e reimplantei o aplicativo imediatamente, funcionou bem.
  • A única vez que ele travou foi em uma instalação totalmente nova. Se eu desinstalasse o aplicativo, criasse e implantei novamente no Eclipse, ele falharia. Construir / implantar uma segunda vez, funcionaria bem.

Como eu o consertei:

  • No projeto da biblioteca ActionBarSherlock, adicionei o android-support-v4-r7-googlemaps.jar no caminho da construção
  • Esta etapa por si só não resolveu o problema

  • Depois que o jar foi adicionado ao caminho de construção, alterei a ordem na guia Caminho de Construção Java> Ordem e Exportação - configurei o JAR para o primeiro item da lista (foi o último após os itens / src e / gen )

  • Em seguida, reconstruí e reimplantei o aplicativo no meu dispositivo - ele funcionou conforme o esperado em uma nova instalação. Apenas para ter certeza, eu o desinstalei novamente 2-3 vezes e reinstalei - ainda funcionava conforme o esperado.

Isso pode ser um erro total de novato, mas passei um bom tempo vasculhando as postagens e meu código para descobrir, por isso espero que possa ser útil para outra pessoa. Pode não corrigir todas as situações, mas, neste caso específico, isso acabou sendo a solução para o meu problema.

Kyle
fonte
Obrigado! Isso funcionou para mim quando recebi esse problema ao usar o exemplo "adcatalog" do googles admob sdk e estava recebendo esse erro. Uma observação importante é marcar as caixas de seleção próximas às bibliotecas. No meu caso, suporte e frascos admobsdk.
jsmars
14

Isso pode não ser relevante para a questão real, mas, no meu caso, tentei implementar o Kotlin e deixei de fora apply plugin: 'kotlin-android' . O erro ocorreu porque não conseguiu reconhecer a MainActivity como um arquivo .kt.

Espero que ajude alguém.

Muz
fonte
1
Adicione também classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$KOTLIN_VERSIONno main build.gradle
Rajkiran
11

Esse erro também pode ser o sinal definitivo de um erro estúpido (como quando eu - quero dizer, tosse, como quando um amigo meu me mostrou seu código uma vez) em que eles tentam executar código fora de um método, como tentar fazer isso :

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

em vez disso:

SQLiteDatabase db;

@Override
public void onCreate(Bundle savedInstanceState) {
db = openOrCreateDatabase("DB", MODE_PRIVATE, null);
....
}
ColossalChris
fonte
1
Ajuda enorme. Fixo meus problemas e me levou a criar meu aplicativo android primeiro totalmente funcional
TheUnCola
7

Eu me livrei desse problema excluindo a pasta Bine Gendo projeto (que volta automaticamente quando o projeto será criado) e depois limpando o projeto em -> Menu -> Projeto -> limpo.

Obrigado.

Jagdeep Singh
fonte
6

No meu caso, não defini o setContentView(R.layout.main);

Se você criar uma nova classe, não faça foge para definir isso no onCreate(Bundle savedInstanceState)método.

Eu cometi esse erro estúpido várias vezes.

saji159
fonte
6

Simplesmente limpe seu projeto de trabalho ou reinicie o eclipse. Em seguida, execute seu projeto. vai funcionar.

Emran Hamza
fonte
Tantas vezes isso aconteceu ... Agora não é possível resolver um arquivo IADL, que provavelmente é a raiz do problema e o eclipse estava sendo compilado com base em arquivos antigos ... então lembre-se de limpar, reiniciar e compilar crianças .. .
Hunter-Orionnoir
6

Para mim, minha string de pacote AndroidManifest.xmlestava incorreta (copiada de um tutorial). Certifique-se de que a sequência de pacotes neste arquivo seja igual à sua atividade principal, por exemplo

 package="com.example.app"

Uma maneira fácil de fazer isso é abrir o arquivo AndroidManifest.xml na guia "Manifest" e digite-o na caixa de texto ao lado de Package ou use o botão Browse.

Além disso, a sequência de pacotes da minha atividade estava errada, por exemplo

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

Eu (estupidamente) recebi o mesmo erro semanas depois quando renomeei o nome do meu pacote. Se você fizer isso, também atualize o AndroidManifest.xmlarquivo.

satyrFrost
fonte
5

Ok, eu sou bastante experiente no iPhone, mas novo no Android. Recebi esse problema quando tive:

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

esta linha de código acima:

@Override
public void onCreate (Bundle savedInstanceState) {
}

Pode ser que eu esteja privado de sono: P

Entendo
fonte
2
Estou privado de sono também
Oz Mayt
3

Encontrei isso recentemente com uma nova reinstalação do Eclipse. Acontece que meu nível de conformidade do compilador foi definido como Java 1.7 e o projeto exigido 1.6.

No Eclipse: Projeto -> Propriedades -> Java Compiler -> Conformidade com JDK

Tapirboy
fonte
2

Obteve este problema e o corrigiu definindo a propriedade "modo de inicialização" da atividade.

Zorglube
fonte
2

Outro motivo desse problema pode ser uma biblioteca ausente.

Vá para Propriedades -> Android e verifique se você adicionou as bibliotecas corretamente

ayalcinkaya
fonte
1
Verifique também se as bibliotecas adicionadas possuem uma marca de seleção em Propriedades do Projeto -> Caminho de Construção Java -> Ordem e Exportação
Phil
2

Eu tive o mesmo problema, mas minha atividade foi declarada no arquivo Manifest, com o nome correto.

Meu problema era que não precisava importar bibliotecas de terceiros em uma pasta "libs" e precisava fazer referência a elas no meu projeto (clique com o botão direito do mouse em propriedades, caminho de construção do Java, bibliotecas, adicionar jar ...).

Maria Mercedes Wyss Alvarez
fonte
2

Isso pode acontecer se sua classe de atividade estiver dentro de um pacote padrão. Corrigi-o movendo a classe de atividade para um novo pacote. e alterando o manifest.xml

antes

activity android:name=".MainActivity" 

depois de

activity android:name="new_package.MainActivity"
Satthy
fonte
Obrigado. foi isso.
Stephane
2

No meu caso, eu estava tentando inicializar os componentes (UI) antes mesmo de onCreateser chamado para a Atividade.

Verifique se os componentes da interface do usuário foram inicializados / vinculados no onCreatemétodo apóssetContentView

NB: Este é o meu primeiro erro ao aprender a programação do Android.

Anup
fonte
2

Para mim, era diferente de qualquer um dos itens acima,

A atividade foi declarada como abstrata. É por isso que deu o erro. Uma vez removido, funcionou.

Anteriormente

     public abstract class SampleActivity extends AppcompatActivity{
     }

Após remoção

     public class SampleActivity extends AppcompatActivity{
     }
Thriveni
fonte
1

Isso acontece com bastante frequência ao usar o NDK. Descobri que é necessário fazer uma "Limpeza" no Eclipse depois de cada vez que faço uma ndk-build. Espero que ajude alguém :)

kizzx2
fonte
1

Este erro também ocorre quando você usa ActionBarActivitymas não atribui um AppCompatestilo.

Para corrigir isso, apenas defina o pai do estilo de seus aplicativos Theme.AppCompatcomo esse:

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

Clique com o botão direito do mouse em projeto> propriedades> android> e tente com uma versão diferente do android anteriormente, eu estava fazendo com o android 4.4, depois mudei para o android 4.3 e funcionou!

nikhilgotan
fonte
1

Eu tive o mesmo problema (não foi possível instanciar a atividade):

PRIMEIRO motivo:

Eu estava acessando

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

antes

mCamera = Camera.open();

A maneira correta de fazer isso é abrir a câmera primeiro e depois acessar os parâmetros.

SEGUNDO motivo: declarar sua atividade no arquivo de manifesto

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

TERCEIRO motivo: declarar a permissão da câmera no seu arquivo de manifesto.

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

Espero que isto ajude

Sdembla
fonte
1

No meu caso, eu estava tentando incorporar o SDK do Facebook e estava tendo o ID do aplicativo errado ; assim, o erro estava aparecendo. No seu arquivo de manifesto, você deve ter os metadados adequados:

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

Se você possui o Android Studio 2.3.3 e o Android Studio 3.0.0 instalados, a alternância entre os dois programas para desenvolvimento causará esse erro. Isso ocorre porque existem situações em que as classes suportadas em um programa não são suportadas pelo outro e vice-versa. É importante manter a consistência em qual versão do Android Studio está sendo usada para desenvolver um projeto.

hexágono
fonte
1

Como sugerido djjeckno comentário nesta resposta, deixei de colocarpublic modificador para a minha classe.

Deveria ser

public class MyActivity extends AppCompatActivity {

Pode ajudar alguns como eu.

Shylendra Madda
fonte
1

Eu tentei todas as soluções acima, mas nada funciona para mim. depois de adicionar extendatividade em vez deAppCompatActivity funcionar bem.

usava

public class MainActivity extends Activity  

ao invés de

public class MainActivity extends AppCompatActivity 

Eu não sei qual era o problema real.

Sagar Jethva
fonte
0

Isso aconteceu comigo quando tentei executar um Activityno 2.2 que usava importações do Honeycomb não disponíveis nas versões mais antigas do Android e também não incluídas no pacote de suporte da v4.

pqn
fonte
0

Sua nova atividade adiciona AndroidManifest.xmlcomo".NewActivity"

 </activity>        
    <activity android:name=".NewActivity" />
NagarjunaReddy
fonte