나는 ListActivity
에 SMS ContentObserver
을 가지고 있습니다. ListView
은 SMS를 보내고받은 을 표시합니다. SMS 데이터베이스 (전송/수신)에 변경이있을 때마다 관찰자 은 ListView
을 업데이트하는 Activity
내의 기능을 호출합니다.CalledFromWrongThreadException : 안드로이드 ContentObserver 및 활동 인터페이스
FROYO에서 잘 작동합니다. 견해를 만질 수있는 뷰 계층 구조를 생성 만 원래 스레드 :하지만 ICS에서 나는 다음과 같은
android.view.ViewRootImpl $ CalledFromWrongThreadException를 얻을.
문제의 원인을 알려주십시오.
다음은 최상위 코드입니다.
public class MyList extends ListActivity implements OnInitListener{
@Override
protected void onDestroy() {
super.onDestroy();
MyList.this.getContentResolver()
.unregisterContentObserver(smsObserver);
}
@Override
protected void onPause() {
super.onPause();
MyList.this.getContentResolver()
.unregisterContentObserver(smsObserver);
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.MyList);
registerSmsEventObserver();
updateList();
}
@Override
protected void onResume() {
super.onResume();
registerSmsEventObserver();
}
updateList() {
//fill up the listview
}
private void registerSmsEventObserver() {
if (smsObserver != null)
return;
smsObserver = new ContentObserver(null) {
public void onChange(boolean selfChange) {
updateList();
}
};
MyList.this.getContentResolver().registerContentObserver(
Uri.parse("content://sms"), true, smsObserver);
}
}
나는 관찰자 내에서 목록보기를 만질 수 없다고 말한다. 옵저버가 호출하는 함수도 보내주십시오 ('updateList()'). –