ホームページ >Java >&#&チュートリアル >アクティビティの移行時に「null オブジェクト参照で仮想メソッドを呼び出そうとしています…」というメッセージが表示されて Android アプリがクラッシュするのはなぜですか?
仮想メソッドを呼び出そうとしています: Null オブジェクト参照
問題:
からの移行時Android アプリケーションで SplashActivity から LoginActivity に変更すると、次のエラーでクラッシュが発生します。 「null オブジェクト参照で仮想メソッド 'android.view.Window$Callback android.view.Window.getCallback()' を呼び出そうとしています。」
説明:
アクティビティが完全に初期化されて準備が完了する前に、LoginActivity がビュー (EditText、TextView など) にアクセスしようとするため、例外が発生します。 findViewById() は LoginActivity のコンストラクターで呼び出されますが、setContentView(...) は onCreate() で明示的に呼び出されません。
解決策:
問題を解決するには、後で onCreate() でビューフィールドを初期化します。 setContentView(...):
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); }
最適化の提案:
インテントの遷移をスケジュールするには、タイマーの代わりにハンドラーを使用することを検討してください。タイマーはバックグラウンド スレッドで TimerTask を実行しますが、この場合は回避する必要があります。ハンドラーは、タスクが UI スレッドで実行されるようにします。
new Handler().postDelayed(new Runnable() { @Override public void run() { Intent intent = new Intent(SplashActivity.this, LoginActivity.class); startActivity(intent); finish(); } }, 1500);
以上がアクティビティの移行時に「null オブジェクト参照で仮想メソッドを呼び出そうとしています…」というメッセージが表示されて Android アプリがクラッシュするのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。