ホームページ >Java >&#&チュートリアル >Android で「Null オブジェクト参照で仮想メソッド 'android.view.Window$Callback android.view.Window.getCallback()' を呼び出そうとしました」というメッセージが表示されるのはなぜですか?

Android で「Null オブジェクト参照で仮想メソッド 'android.view.Window$Callback android.view.Window.getCallback()' を呼び出そうとしました」というメッセージが表示されるのはなぜですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-12-09 14:10:151021ブラウズ

Why Do I Get

Android の「Null オブジェクト参照で仮想メソッド 'android.view.Window$Callback android.view.Window.getCallback()' を呼び出そうとする」

このエラーは、アクティビティが完全に初期化される前にビューにアクセスしようとすると発生します。具体的には、Window.getCallback() メソッドが null オブジェクトに対して呼び出されたときにエラーがトリガーされます。これは、onCreate() で setContentView() メソッドがまだ呼び出されていなかった場合に発生する可能性があります。

原因:
このエラーを防ぐには、クラス内でビュー フィールドを初期化せずに宣言することが重要です。宣言:

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

次に、setContentView() が呼び出された後、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);
}

追加のアドバイス:

  • UI スレッドでコードを実行するには、ハンドラーの代わりにハンドラーを使用することを検討してください。タイマー。タイマーはバックグラウンド スレッドでタスクを実行します。
new Handler().postDelayed(new Runnable() {
    @Override
    public void run() {
        Intent intent = new Intent(SplashActivity.this, LoginActivity.class);
        startActivity(intent);
        finish();
    }
}, 1500);

以上がAndroid で「Null オブジェクト参照で仮想メソッド 'android.view.Window$Callback android.view.Window.getCallback()' を呼び出そうとしました」というメッセージが表示されるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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