アクティビティの起動時にandroid classcastExceptionが発生する
-
27-09-2019 - |
質問
私はアンドロイドで簡単なアクティビティプログラムを持っています。基本的にクラスはアクティビティを拡張するだけです。しかし、それを開始すると、クラスのコンストラクターで ClassCastException が発生します。コンストラクターも定義されていないため、Activity であるスーパークラスのコンストラクター内にある必要があります。
残念ながら、デバッガはキャストしようとしているクラスに関する詳細情報を提供しません。
これがスタックトレースです:
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]
そして、ランタイム例外を調べると、次の結果が得られます。
detailMessage "Unable to instantiate application com.test.MyApp: java.lang.ClassCastException: com.test.MyApp" (id=830067694464)
唯一のコードは
package com.test;
import android.app.Activity;
public class MyApp extends Activity {
}
解決
- 開ける
AndroidManifest.xml
- タグを検索
application
- 属性の削除
android:name
(存在する場合) - 属性の追加
android:name="android.app.Application"
これが私がやったことであり、問題は解決しました。
追伸:ステップ 4 では、カスタム アプリケーション クラス名がある場合はそれを使用します (オプション)。
他のヒント
私は同じ問題を抱えています。
私の場合は、拡張されたアプリケーションは、アプリケーションタグの属性としてのマニフェストファイルで参照されたことをクラスを持っています。
場合はI-織り込ま再クラスEclipseは、この問題をもたらした(当然のことながらしかし、イライラと紛らわしい)マニフェスト内の参照が含まれていませんでした。
マキシムの答えとでこのもの絆が、説明は格差であるように見えるでしょう。
私は、問題が解決された名前を変更するファイルと一致するように属性名を変更します。
愚かな間違いを犯してしまいました、
my_textView = (<b>Button</b>) findViewById(R.id.tvMyTextView);
そしてこれが原因となりました クラスキャスト例外..
これを明白なものに変更しました、
my_textView = (<b>TextView</b>) findViewById(R.id.tvMyTextView);
そしてそれはうまくいきました..
方法はわかりませんが、私に言えるのは、そのような愚かな間違いも上記の問題を引き起こす可能性があるということだけです。
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
これを追加し、あなたの完全なたManifest.xml
を投稿私は時々明らかにXMLレイアウトで並べ替えアイテムによってトリガ、時折occuring同じ問題を抱えています。
あなたはアプリがキャッチされない例外の後に実行を継続できるようにする場合は、、あなたはあなたが簡単にそれが停止した時点で、デバッガから抜け出すことができるよりも、「ADBのlogcat」ではるかに役立つスタックトレースを取得することを見つける必要があります。
これは通常、一般的には、デバッガで停止した場所ではない例外が実際に発生した場所、であなたを指します。
私はview.findViewById(R.id.something)をやったとき、それは私を返していなかったというようなことを混同するように見えたXMLファイル内の周りのものを移動する -私の場合は、リソースIDの間のミスマッチように見えました正しいオブジェクト。私は私のXMLレイアウトの内容に応じて完全に有効となっているはずのTextViewにオブジェクトをキャストして、それがクラッシュしていました。
あなたが実際にあなたが確かにこの例外が発生する原因となります無効なキャストを、やっているバグを持っていますが、私の場合には、クリーンを強制し、問題の解決策を再構築することがあります - それはコンパイルレイアウトやリソースを再生成しました予想通りゼロからのID、およびすべてが働いています。
Googleマップを使用している場合:
<uses-library android:name="com.google.android.maps" />
この行を覚えておいてください。私はそれを忘れてしまったし、多くの時間ので、無駄に信じることができません。
私はこれはキャストせずにビューを割り当てることにより起こります。..マヘシュの答えに同意...
ボタンを表示またはいくつかの他のビュークラスにのImageButtonビューをキャストしている場合、これがまた発生します。
これはあるpreferences.xmlで間違った使い方を引き起こしたことを、私は同じ問題を抱えていた、と私は把握します
<CheckBoxPreference android:key="@+id/string" />
に変更しなければなりませんでした
<CheckBoxPreference android:key="string" />
ClassCastException で同様の問題が発生し、EditText を TextView としてキャストできないことがわかりました。そうしようとしていたわけではない。プロジェクトをクリーンアップしようとしましたが、「ファイルを削除できません...」エラーがいくつか発生しました。Eclipseを閉じて再度開き、プロジェクトをクリーンアップしました。問題は解決しました。すべてのケースでこれがうまくいくわけではないことは明らかですが、可能性の 1 つとして考えられます。