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 중국어 웹사이트의 기타 관련 기사를 참조하세요!