본문 바로가기
안드로이드

[Android] java.lang.RuntimeException 에러 해결

by 코딩히어로 2022. 6. 28.
728x90

제목


안드로이드 개발 중 Thread 내부에서 Handler를 사용했을 때 다음과 같은 에러 문구가 발생했습니다

2011-01-01 21:36:04.816 18055-18106/com.ftdi.javad2xxdemo E/AndroidRuntime: FATAL EXCEPTION: Thread-4
    Process: com.ftdi.javad2xxdemo, PID: 18055
    java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
        at android.os.Handler.<init>(Handler.java:204)
        at android.os.Handler.<init>(Handler.java:118)
        at com.ftdi.javad2xxdemo.DeviceUARTFragment$readThread$1.<init>(DeviceUARTFragment.java:11823)
        at com.ftdi.javad2xxdemo.DeviceUARTFragment$readThread.run(DeviceUARTFragment.java:11823)

해당 에러는 Thread run() 함수 내에서 new Handler를 호출했을 경우에 발생했는데

그럼 Thread 내부에서는 Handler를 사용할수 없는 것일까요

 

아닙니다 생각보다 간단한 방법으로 해당 에러는 해결이 가능합니다

먼저 기존에 생성했던 Handler는 다음과 같습니다

private class Thread extends Thread{
	@Override
    public void run(){    	
        new Handler(){
            @Override
            public void handleMessage(Message msg) {
                super.handleMessage(msg);
            }
        }.sendEmptyMessage(0);
    }
}

Thread 내부에서 Handler를 생성했고 에러를 발생시켰는데

문제가 되는 부분이 바로 4번째 줄의 new Handler() 부분입니다.

 

이 부분을 다음과 같이 수정합니다

private class Thread extends Thread{
	@Override
    public void run(){    	
        new Handler(Looper.getMainLooper()){
            @Override
            public void handleMessage(Message msg) {
                super.handleMessage(msg);
            }
        }.sendEmptyMessage(0);
    }
}

바로 Handler 생성 인자로 Looper.getMainLooper()를 제공하는 것입니다

이렇게 추가만 해주면 해당 에러는 해결됩니다

728x90
반응형

댓글