12

私はアンドロイドで簡単なアクティビティプログラムを持っています。基本的に、クラスはアクティビティを拡張するだけです。しかし、それを開始すると、クラスのコンストラクターで 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]  

そして、runtimeexception を調べると、次のようになります。

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 {

}
4

9 に答える 9

24
  1. 開けるAndroidManifest.xml
  2. タグを探すapplication
  3. 属性を削除android:name(存在する場合)
  4. 属性を追加android:name="android.app.Application"

これが私がしたことで、問題は解決しました。

PS: ステップ 4 では、カスタム アプリケーション クラス名がある場合はそれを使用します (オプションです)。

于 2010-10-17T12:37:15.303 に答える
5

私も同じ問題を抱えていました。

私の場合、アプリケーションタグの属性としてマニフェストファイルで参照されたアプリケーションを拡張するクラスがありました。

私がクラスをリファクタリングしたとき、Eclipse はマニフェストに参照を含めませんでした (当然のことですが、イライラして紛らわしいことに)、この問題が発生しました。

これもマキシムの答えと結びついていますが、説明は格差のようです。

名前を変更したファイルと一致するように属性名を変更すると、問題は解決しました。

于 2011-02-13T19:06:53.610 に答える
4

私はばかげた間違いを犯しました、

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

これにより、クラスキャスト例外が発生しました..

私はこれを明白に変えました、

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

そしてそれは働いた..

方法はわかりませんが、私が言えることは、そのようなばかげた間違いも上記の問題を引き起こす可能性があるということだけです..

于 2012-05-16T16:23:53.190 に答える
2
@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.main);
}

これを追加して、完全な Manifest.xml を投稿してください

于 2010-11-10T20:16:58.230 に答える
2

XML レイアウトでアイテムの順序を変更することで、同じ問題が時々発生することがありました。

キャッチされていない例外の後もアプリの実行を継続できるようにすると、「adb logcat」で、停止した時点でデバッガーから簡単に抜け出すよりもはるかに役立つスタック トレースが得られることがわかります。

これは通常、例外が実際に発生した場所を示します。これは通常、デバッガーで停止する場所ではありません。

私の場合、リソース ID 間の不一致のようでした。XML ファイル内で物事を移動すると、view.findViewById(R.id.something) を実行したときに正しいオブジェクトが返されないなど、混乱しているように見えました。オブジェクトを TextView にキャストしていました。これは、XML レイアウトの内容によれば完全に有効であるはずでしたが、クラッシュしていました。

無効なキャストを実行しているバグが実際にあることに気付くかもしれません。これにより、この例外が発生することは確かですが、私の場合は、強制的にクリーンアップして再構築することで問題が解決しました。コンパイルされたレイアウトとリソース ID が最初から再生成されました。 、そしてすべてが期待どおりに機能しました。

于 2014-01-07T15:37:44.740 に答える
0

私は同じ問題を抱えていましたが、これがpreferences.xmlでの誤った使用法を引き起こし、 <CheckBoxPreference android:key="@+id/string" /> 変更する必要があったことがわかりました <CheckBoxPreference android:key="string" />

于 2013-03-13T10:37:43.940 に答える
0

私はマヘシュの答えに同意します..これは、キャストせずにビューを割り当てるために発生します...

これは、ImageButton ビューをボタン ビューまたはその他のビュー クラスにキャストしている場合にも発生します。

于 2012-09-22T20:35:38.850 に答える