ホームページ > Java > &#&チュートリアル > アクティビティ ナビゲーション中に「null オブジェクト参照で仮想メソッド 'android.view.Window$Callback android.view.Window.getCallback()' を呼び出しようとしました」というエラーで Android アプリがクラッシュするのはなぜですか?

アクティビティ ナビゲーション中に「null オブジェクト参照で仮想メソッド 'android.view.Window$Callback android.view.Window.getCallback()' を呼び出しようとしました」というエラーで Android アプリがクラッシュするのはなぜですか?

Mary-Kate Olsen
リリース: 2024-12-05 03:42:17
オリジナル
1009 人が閲覧しました

Why Does My Android App Crash with

Android: "null オブジェクト参照で仮想メソッド 'android.view.Window$Callback android.view.Window.getCallback()' を呼び出そうとしています"

SplashActivity から LoginActivity に移動すると、アプリがエラーでクラッシュする「null オブジェクト参照で仮想メソッド 'android.view.Window$Callback android.view.Window.getCallback()' を呼び出そうとしています。」このエラーは通常、アクティビティが完全に初期化される前にビューにアクセスするとき、または UI 関連のアクションを実行するときに発生します。

この場合、エラーは次の問題によって引き起こされる可能性が高くなります:

ビュー フィールドの早期初期化:

LoginActivity.java では、usernameField、passwordField、エラー、および進捗フィールドはコンストラクターで宣言され、値が割り当てられます。ただし、これらのフィールドにアクセスするとき、アクティビティの onCreate() メソッドはまだ呼び出されていません。つまり、setContentView() は実行されておらず、ビュー階層は設定されていません。その結果、フィールドは存在しないビューを参照しようとし、null ポインタ例外が発生します。

解決策:

この問題を解決するには、次のことが必要です。 setContentView() が呼び出された後にのみビュー フィールドを初期化します。これにより、ビュー階層が完全に初期化され、アクセスできるようになります。

LoginActivity.java の更新されたコード:

private EditText usernameField;
private EditText passwordField;
private TextView error;
private ProgressBar progress;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_login);

    usernameField = (EditText)findViewById(R.id.username);
    passwordField = (EditText)findViewById(R.id.password);
    error = (TextView)findViewById(R.id.error);
    progress = (ProgressBar)findViewById(R.id.progress);
}
ログイン後にコピー

さらに、制御にはタイマーの代わりにハンドラーを使用することをお勧めします。 SplashActivity から LoginActivity へのナビゲーションが UI スレッドで確実に発生するようにします。

の更新されたコードSplashActivity.java:

new Handler().postDelayed(new Runnable() {
    @Override
    public void run() {
        Intent intent = new Intent(SplashActivity.this, LoginActivity.class);
        startActivity(intent);
        finish();
    }
}, 1500);
ログイン後にコピー

以上がアクティビティ ナビゲーション中に「null オブジェクト参照で仮想メソッド 'android.view.Window$Callback android.view.Window.getCallback()' を呼び出しようとしました」というエラーで Android アプリがクラッシュするのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート