가상 메서드 호출 시도: 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!