>Java >java지도 시간 >활동 탐색 중에 'null 개체 참조에서 가상 메서드 'android.view.Window$Callback android.view.Window.getCallback()' 호출 시도'와 함께 내 Android 앱이 충돌하는 이유는 무엇입니까?

활동 탐색 중에 'null 개체 참조에서 가상 메서드 'android.view.Window$Callback android.view.Window.getCallback()' 호출 시도'와 함께 내 Android 앱이 충돌하는 이유는 무엇입니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-12-05 03:42:17999검색

Why Does My Android App Crash with

Android: "null 객체 참조에서 가상 메소드 'android.view.Window$Callback android.view.Window.getCallback()' 호출을 시도합니다."

SplashActivity에서 LoginActivity로 이동할 때 앱이 오류와 함께 충돌합니다. "Null 개체 참조에서 가상 메서드 'android.view.Window$Callback android.view.Window.getCallback()'을 호출하려고 시도했습니다." 이 오류는 일반적으로 활동이 완전히 초기화되기 전에 뷰에 액세스하거나 UI 관련 작업을 수행할 때 발생합니다.

이 경우 오류는 다음 문제로 인해 발생할 가능성이 높습니다.

보기 필드의 조기 초기화:

LoginActivity.java에서 사용자 이름 필드, 비밀번호 필드, 오류 및 진행 상황 필드는 생성자에서 선언되고 값이 할당됩니다. 그러나 이러한 필드에 액세스할 때 Activity의 onCreate() 메서드가 아직 호출되지 않았습니다. 이는 setContentView()가 실행되지 않았으며 뷰 계층 구조가 설정되지 않았음을 의미합니다. 결과적으로 필드가 존재하지 않는 뷰를 참조하려고 시도하여 null 포인터 예외가 발생합니다.

해결 방법:

문제를 해결하려면 다음이 필요합니다. setContentView()가 호출된 후에만 뷰 필드를 초기화합니다. 이렇게 하면 뷰 계층 구조가 완전히 초기화되고 액세스 가능해집니다.

LoginActivity.java의 업데이트된 코드:

private EditText usernameField;
private EditText passwordField;
private TextView error;
private ProgressBar progress;

@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 스레드에서 발생하는지 확인합니다.

업데이트된 코드는 SplashActivity.java:

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

위 내용은 활동 탐색 중에 'null 개체 참조에서 가상 메서드 'android.view.Window$Callback android.view.Window.getCallback()' 호출 시도'와 함께 내 Android 앱이 충돌하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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