ホームページ >Java >&#&チュートリアル >LoginActivity のビューにアクセスすると NullPointerException が発生するのはなぜですか?

LoginActivity のビューにアクセスすると NullPointerException が発生するのはなぜですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-12-07 01:43:12927ブラウズ

Why Am I Getting a NullPointerException When Accessing Views in My LoginActivity?

NullPointerException: 初期化されていないウィンドウからコールバックを取得しようとしています

SplashActivity から LoginActivity に移動すると、アプリでエラーが発生します:

Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.Window$Callback android.view.Window.getCallback()' on a null object reference

このエラーは次のことを示しています。 LoginActivity は、適切に初期化される前にビュー コンポーネントにアクセスしようとしています。

原因

エラーの具体的な原因は LoginActivity.java コードにあります。クラスメンバーは、onCreate() で setContentView() が呼び出される前に初期化されます。これにより、クラス メンバーがビューを見つけようとしたときにビューがまだ存在しないという状況が発生します。

解決策

この問題を解決するには、ビュー メンバーを宣言します。初期化なしのクラス:

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

次に、setContentView() が実行された後、onCreate() 内でメンバーを初期化します。呼び出し先:

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 スレッドでタスクを実行するときは、Timer を Handler に置き換えることをお勧めします。

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

以上がLoginActivity のビューにアクセスすると NullPointerException が発生するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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