エラーの理解:「Null オブジェクト参照で仮想メソッド '...' を呼び出しようとしています」
から移動しようとしたときSplashActivity から LoginActivity に変更すると、アプリケーションが次のようにクラッシュします。エラー:
java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.Window$Callback android.view.Window.getCallback()' on a null object reference
問題の根本原因:
このエラーは、Java オブジェクトへの参照が null を返し、操作の実行を妨げていることを示唆しています。有効なオブジェクトが必要です。この場合、これは LoginActivity.java コード内のビュー要素の初期化に関係します。
解決策:
解決策は、参照する前にビュー要素を適切に初期化することです。コードでそれらを記述します。提供された回答は、onCreate() の外でビュー要素を初期化すると null 参照が発生する可能性があることを正しく示しています。
問題を解決するには、初期化せずに LoginActivity.java でビュー フィールドを次のように宣言します。
private EditText usernameField, passwordField; private TextView error; private ProgressBar progress;
次に、内のフィールドに値を割り当てます。 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); }
追加の最適化:
回答で提案されているように、タイマーの代わりにハンドラーを使用して SplashActivity からへの移行をスケジュールします。 LoginActivity は、UI スレッドでの実行を保証し、潜在的な問題を回避し、よりスムーズなユーザー操作を保証するため、推奨されるベスト プラクティスです。体験してください。
以上がアクティビティ間を移動すると、「Null オブジェクト参照で仮想メソッド '...' を呼び出そうとしました」というメッセージが表示されて Android アプリがクラッシュするのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。