>Java >java지도 시간 >활동을 전환할 때 'null 개체 참조에서… 가상 메서드 호출 시도'와 함께 내 Android 앱이 충돌하는 이유는 무엇입니까?

활동을 전환할 때 'null 개체 참조에서… 가상 메서드 호출 시도'와 함께 내 Android 앱이 충돌하는 이유는 무엇입니까?

Linda Hamilton
Linda Hamilton원래의
2024-12-05 15:22:10891검색

Why Does My Android App Crash with

가상 메서드 호출 시도: Null 개체 참조

문제:

Android 애플리케이션에서 LoginActivity에 대한 SplashActivity를 사용하면 다음 오류와 함께 충돌이 발생합니다. "Null 객체 참조에서 가상 메소드 'android.view.Window$Callback android.view.Window.getCallback()'을 호출하려고 시도합니다."

설명:

활동이 완전히 초기화되고 준비되기 전에 LoginActivity가 보기(예: EditText, TextView)에 액세스하려고 시도하기 때문에 예외가 발생합니다. findViewById()는 LoginActivity의 생성자에서 호출되지만 setContentView(...)는 onCreate()에서 명시적으로 호출되지 않습니다.

해결 방법:

문제를 해결하려면, onCreate()에서 뷰 필드를 초기화한 후 setContentView(...):

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);
}

최적화 제안:

인텐트 전환을 예약하려면 타이머 대신 핸들러를 사용하는 것이 좋습니다. Timer는 백그라운드 스레드에서 TimerTask를 실행하는데, 이 경우에는 피해야 합니다. 핸들러는 작업이 UI 스레드에서 실행되는지 확인합니다.

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

위 내용은 활동을 전환할 때 'null 개체 참조에서… 가상 메서드 호출 시도'와 함께 내 Android 앱이 충돌하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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