Pergunta

Eu tenho um programa de atividades simples no Android. Basicamente, a classe apenas estende a atividade. Mas quando inicio, recebo uma classe de classe no construtor da minha classe. Eu nem tenho um construtor definido, por isso deve estar no construtor da superclasse, que é a atividade.

Infelizmente, o depurador não fornece informações detalhadas sobre qual classe está tentando lançar.

Aqui está o Stacktrace:

Thread [<1> main] (Suspended (exception RuntimeException))  
    ActivityThread$PackageInfo.makeApplication(boolean, Instrumentation) line: 649  
    ActivityThread.handleBindApplication(ActivityThread$AppBindData) line: 4232 
    ActivityThread.access$3000(ActivityThread, ActivityThread$AppBindData) line: 125    
    ActivityThread$H.handleMessage(Message) line: 2071  
    ActivityThread$H(Handler).dispatchMessage(Message) line: 99 
    Looper.loop() line: 123 
    ActivityThread.main(String[]) line: 4627    
    Method.invokeNative(Object, Object[], Class, Class[], Class, int, boolean) line: not available [native method]  
    Method.invoke(Object, Object...) line: 521  
    ZygoteInit$MethodAndArgsCaller.run() line: 868  
    ZygoteInit.main(String[]) line: 626 
    NativeStart.main(String[]) line: not available [native method]  

E quando eu olho para a hora de execução, eu recebo:

detailMessage "Unable to instantiate application com.test.MyApp: java.lang.ClassCastException: com.test.MyApp" (id=830067694464)

O único código é

package com.test;
import android.app.Activity;
public class MyApp extends Activity {

}
Foi útil?

Solução

  1. Abrir AndroidManifest.xml
  2. Encontre tag application
  3. Remova o atributo android:name (se existe)
  4. Adicionar atributo android:name="android.app.Application"

Foi isso que eu fiz e o problema foi.

PS: Na etapa 4, use seu nome de classe de aplicativo personalizado, se você tiver um (isso é opcional).

Outras dicas

Eu tive o mesmo problema.

No meu caso, eu tinha uma classe que estendeu o aplicativo que foi referenciado no arquivo de manifesto como um atributo da tag do aplicativo.

Quando o Eclipse de Classe não incluía a referência no manifesto (compreensivelmente, mas frustrante e confuso), o que resultou nessa questão.

Isso também se vincula à resposta de Maxim, mas a explicação parece ser a disparidade.

Quando mudei o nome do atributo para corresponder ao arquivo que renomeei o problema foi resolvido.

Eu cometi um erro bobo,

my_textView = (<b>Button</b>) findViewById(R.id.tvMyTextView);

E isso causou o ClassCastException..

Eu mudei isso para o óbvio,

my_textView = (<b>TextView</b>) findViewById(R.id.tvMyTextView);

E funcionou ..

Eu não sei como, mas tudo o que posso dizer é que esses erros bobos também podem causar o problema acima ..

@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.main);
}

Adicione isso e poste seu manifesto completo.xml

Eu tive o mesmo problema ocorrendo ocasionalmente, às vezes aparentemente desencadeado pela reordenação de itens em um layout XML.

Se você permitir que o aplicativo continue executando após a exceção não capturada, descobrirá que obtém um empilhamento muito mais útil no "adb logcat" do que você pode facilmente sair do depurador no ponto em que ele para.

Isso geralmente aponta para o local em que a exceção realmente ocorreu, o que geralmente não é o local onde ele para no depurador.

No meu caso, parecia ser uma incompatibilidade entre os IDs de recursos - mover as coisas no arquivo XML parecia confundir as coisas de modo que, quando eu visualizei.FindViewById (R.id.Something), não estava me devolvendo o objeto correto. Eu estava lançando o objeto para uma visão de texto, que deveria ter sido perfeitamente válida de acordo com o conteúdo do meu layout XML, mas estava travando.

Você pode achar que realmente tem um bug no qual está fazendo um elenco inválido, o que certamente fará com que essa exceção aconteça, mas no meu caso forçando uma limpeza e a reconstrução resolveu o problema - regenerou os layouts compilados e os IDs de recursos do zero do zero do zero do zero do zero do zero , e tudo funcionou como esperado.

Se estiver usando o Google Maps:

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

Lembre -se desta linha. Não posso acreditar que eu esqueci e perdi muito tempo.

Eu concordo com a resposta de Mahesh .. isso acontecerá devido à atribuição da vista sem lançar ...

Isso também acontecerá se você estiver lançando uma visualização do Button para exibição de botão ou outra classe de exibição.

Eu tive o mesmo problema e acho que isso causou uso errado em preferências.xml<CheckBoxPreference android:key="@+id/string" />teve que estar mudando para<CheckBoxPreference android:key="string" />

Tive um problema semelhante com uma ClassCastException me dizendo que eu não poderia lançar um EditText como uma visualização de texto. Eu não estava tentando. Tentei limpar o projeto, mas recebeu vários erros 'não pode excluir o arquivo ...'. Eclipse fechado, reabriu, limpou o projeto. O problema foi embora. Claramente, isso não funcionará em todos os casos, mas é uma possibilidade.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top