ホームページ >Java >&#&チュートリアル >アクティビティの移行時に「null オブジェクト参照で仮想メソッドを呼び出そうとしています…」というメッセージが表示されて Android アプリがクラッシュするのはなぜですか?

アクティビティの移行時に「null オブジェクト参照で仮想メソッドを呼び出そうとしています…」というメッセージが表示されて Android アプリがクラッシュするのはなぜですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-12-05 15:22:10882ブラウズ

Why Does My Android App Crash with

仮想メソッドを呼び出そうとしています: Null オブジェクト参照

問題:

からの移行時Android アプリケーションで SplashActivity から LoginActivity に変更すると、次のエラーでクラッシュが発生します。 「null オブジェクト参照で仮想メソッド 'android.view.Window$Callback android.view.Window.getCallback()' を呼び出そうとしています。」

説明:

アクティビティが完全に初期化されて準備が完了する前に、LoginActivity がビュー (EditText、TextView など) にアクセスしようとするため、例外が発生します。 findViewById() は LoginActivity のコンストラクターで呼び出されますが、setContentView(...) は onCreate() で明示的に呼び出されません。

解決策:

問題を解決するには、後で onCreate() でビューフィールドを初期化します。 setContentView(...):

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);
}

最適化の提案:

インテントの遷移をスケジュールするには、タイマーの代わりにハンドラーを使用することを検討してください。タイマーはバックグラウンド スレッドで TimerTask を実行しますが、この場合は回避する必要があります。ハンドラーは、タスクが UI スレッドで実行されるようにします。

new Handler().postDelayed(new Runnable() {
    @Override
    public void run() {
        Intent intent = new Intent(SplashActivity.this, LoginActivity.class);
        startActivity(intent);
        finish();
    }
}, 1500);

以上がアクティビティの移行時に「null オブジェクト参照で仮想メソッドを呼び出そうとしています…」というメッセージが表示されて Android アプリがクラッシュするのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。