NullPointerException: Mencuba Mendapatkan Panggilan Balik dari Tetingkap Tidak Dimulakan
Apabila menavigasi dari SplashActivity ke LoginActivity, apl menghadapi ralat:
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.Window$Callback android.view.Window.getCallback()' on a null object reference
Ralat ini menunjukkan bahawa LoginActivity sedang mencuba akses komponen paparan sebelum ia telah dimulakan dengan betul.
Punca
Punca ralat khusus terletak pada kod LoginActivity.java, tempat ahli kelas dimulakan sebelum setContentView() dipanggil dalam onCreate(). Ini membawa kepada situasi di mana pandangan belum wujud lagi apabila ahli kelas cuba mencarinya.
Penyelesaian
Untuk menyelesaikan isu, isytiharkan ahli lihat dalam kelas tanpa permulaan:
private EditText usernameField, passwordField; private TextView error; private ProgressBar progress;
Kemudian, mulakan ahli dalam onCreate() selepas setContentView() telah dipanggil:
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); }
Nasihat Tambahan
Walaupun tidak berkaitan secara langsung dengan ralat, adalah disyorkan untuk menggantikan Pemasa dengan Pengendali apabila menjalankan tugas pada urutan UI:
new Handler().postDelayed(new Runnable() { @Override public void run() { Intent intent = new Intent(SplashActivity.this, LoginActivity.class); startActivity(intent); finish(); } }, 1500);
Atas ialah kandungan terperinci Mengapa Saya Mendapat NullPointerException Apabila Mengakses Paparan dalam Log Masuk Saya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!