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

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

Patricia Arquette
リリース: 2024-12-11 17:48:17
オリジナル
619 人が閲覧しました

Why Does My Android App Crash with

エラーの理解:「Null オブジェクト参照で仮想メソッド '...' を呼び出しようとしています」

から移動しようとしたときSplashActivity から LoginActivity に変更すると、アプリケーションが次のようにクラッシュします。エラー:

java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.Window$Callback android.view.Window.getCallback()' on a null object reference
ログイン後にコピー

問題の根本原因:

このエラーは、Java オブジェクトへの参照が null を返し、操作の実行を妨げていることを示唆しています。有効なオブジェクトが必要です。この場合、これは LoginActivity.java コード内のビュー要素の初期化に関係します。

解決策:

解決策は、参照する前にビュー要素を適切に初期化することです。コードでそれらを記述します。提供された回答は、onCreate() の外でビュー要素を初期化すると null 参照が発生する可能性があることを正しく示しています。

問題を解決するには、初期化せずに LoginActivity.java でビュー フィールドを次のように宣言します。

private EditText usernameField, passwordField;
private TextView error;
private ProgressBar progress;
ログイン後にコピー

次に、内のフィールドに値を割り当てます。 onCreate() メソッド:

@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 スレッドでの実行を保証し、潜在的な問題を回避し、よりスムーズなユーザー操作を保証するため、推奨されるベスト プラクティスです。体験してください。

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

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