>Java >java지도 시간 >내 LoginActivity에서 뷰에 액세스할 때 NullPointerException이 발생하는 이유는 무엇입니까?

내 LoginActivity에서 뷰에 액세스할 때 NullPointerException이 발생하는 이유는 무엇입니까?

Linda Hamilton
Linda Hamilton원래의
2024-12-07 01:43:12910검색

Why Am I Getting a NullPointerException When Accessing Views in My LoginActivity?

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 스레드에서 작업을 실행할 때 타이머를 핸들러로 바꾸는 것이 좋습니다.

new Handler().postDelayed(new Runnable() {
  @Override
  public void run() {
    Intent intent = new Intent(SplashActivity.this, LoginActivity.class);
    startActivity(intent);
    finish();
  }
}, 1500);

위 내용은 내 LoginActivity에서 뷰에 액세스할 때 NullPointerException이 발생하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.