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