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

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

Linda Hamilton
リリース: 2024-12-07 01:43:12
オリジナル
876 人が閲覧しました

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 サイトの他の関連記事を参照してください。

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