본문 바로가기

입코딩으로하는 ERROR REPORT

안드로이드(android)에서 Thread상에서 Adapter의 notifyDataSetChanged를 사용할때 Exception 발생.




안드로이드 상에서 Adapter를 이용하여 컨트롤 할때, 해당 Adapter에 notifyDataSetChanged 함수를 이용하여 Adapter의 데이터가 변한 것을 알려주어 UI Thread 쪽을 바꿔주게 된다.
이때, Thread 상에서 UI쪽을 제어하기 위해

mhandler.postAtFrontOfQueue(new Runnable() {     
     @Override
     public void run() {
      ga.notifyDataSetChanged();      
     }
});

※ ga는 전역변수로 선언된 Adapter

식의 코드를 사용했는데, 이상하게도 때에 따라 오류.
이론상 핸들러에서 post로 Runnable을 던져주는게 맞는듯 하긴한데,
처음 보는 에러가 뜬다.
(에러 코드가 기억이 안난다 -.-;;)

문제는 항상 뜨는 것이 아니라 가끔 뜨는 것.
내용은 "Adapter의 데이터가 바뀌었는데 notify 되지 않았습니다." 이런 내용이었다.
그래서 처음에는 post를 postAtFrontOfQueue로 바꿨는데도 같은 증상이었음.


위 분홍색 코드 부분을
runOnUiThread(new Runnable() {           
     @Override
     public void run() {
      ga.notifyDataSetChanged();
     }
});
※ ga는 전역변수로 선언된 Adapter
처럼 제공되는 함수로 처리해주면 이상없이 돌아가며 예외가 발생하지 않는다.

※ 예전부터 runOnUiThread 함수를 이런저런 싸이트가다 봤는데, 이런데서 쓰게될 줄이야........

잡설 : 초창기에는 Handler로 무조건 Message를 쏴줘서 처리를 했고, (UI Thread에서 할일)
         다음은 귀찮아서 Handler의 Post를 이용해서 Runnable을 쏴주고 했는데!!
         runOnUiThread를 쓰니까 뭔가 안정적인것 같고 깔끔해지는 느낌이군요. 흠흠

 
조금이라도 도움이 되셨기를 바라며, 혹시나 도움이 되셨다면 리플을 남겨주셔요 ㅎㅎ