首頁 > Java > 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 時,應用程式遇到錯誤:

從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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板