Archives
Recent Posts
«   2025/02   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28
Today
Total
관리 메뉴

안드로이드 개발자의 창고

[안드로이드 스튜디오] Attempt to invoke virtual method 'android.os.IBinder android.view.View.getWindowToken()' on a null object reference 해결 본문

오류 해결

[안드로이드 스튜디오] Attempt to invoke virtual method 'android.os.IBinder android.view.View.getWindowToken()' on a null object reference 해결

Wise-99 2023. 7. 7. 18:42

✔️ 오류 및 원인

화면이 전환될 때 키보드를 자동으로 올려주기 위해서 InputMethodManager를 사용했다.

비동기적 처리를 위해서 thread를 이용하였는데 getWindowToken()이 null을 반환한다는 오류이다.

 

 

 

lateinit var mainActivity: MainActivity

val imm = mainActivity.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
mainActivity = activity as MainActivity

...

// 포커스 설정
dialogBinding.editTextAddCategory.requestFocus()

// 키보드 올림
thread {
	SystemClock.sleep(500)
	imm.showSoftInput(mainActivity.currentFocus, 0)
}

해당 코드는 Fragment에서 mainActivity를 받아 currentFocus를 사용하는 방식이었는데

생각해보니 mainActivity.currentFocus가 아니라 현재 Fragment의 View를 넣어야 null이 안나오지 않을까 싶었다.

 

 

 

✔️ 해결 방법

imm.showSoftInput(포커스가 설정된 뷰, 0)으로 코드를 바꿨더니 해결됐다!

내 경우에는 dialog 안에 있는 editText라서 아래와 같이 설정해줬다.

lateinit var mainActivity: MainActivity

val imm = mainActivity.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
mainActivity = activity as MainActivity

...

// 포커스 설정
dialogBinding.editTextAddCategory.requestFocus()

// 키보드 올림
thread {
	SystemClock.sleep(500)
	imm.showSoftInput(dialogBinding.editTextAddCategory, 0)
}