Tôi gặp sự cố với lỗi sau đây trong Android:CalledFromWrongThreadException: Chỉ có chủ đề ban đầu đã tạo ra phân cấp hình ảnh có thể chạm vào quan điểm
CalledFromWrongThreadException ;: Chỉ thread ban đầu đã tạo ra một hệ thống phân cấp xem có thể chạm quan điểm của nó
Dường như điều này xảy ra khi tôi cố gắng cập nhật Textview trong Hoạt động của tôi, cuộc gọi cập nhật TextView là từ trong Hoạt động của tôi nhưng tôi vẫn gặp lỗi trên.
tôi có nó như thế này:
onCreate() -sets lên các nút và xem văn bản.
onStateChange() - người nghe thông báo về thay đổi trạng thái, khi điều này nhận được thông báo nếu thay đổi TextView để nói một số văn bản khác.
Khi tôi nhận được thông báo của một văn bản mới tôi cố gắng thay đổi TextView như vậy:
((TextView)findViewById(R.id.title)).setText("Some Text");
Nhưng tôi nhận được lỗi trên.
Từ googling nó, có vẻ như tôi nên sử dụng một trình xử lý để thay đổi TextView hoặc có thể sử dụng AsyncTask?
Có ai có thể giải thích cái nào sẽ tốt hơn để sử dụng và tại sao không?
EDIT: GIA TĂNG đoạn mã:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);
setContentView(R.layout.my);
getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.my_title);
((TextView)findViewById(R.id.time)).setText("Hello Text");
findViewById(R.id.keyboardimage).setOnClickListener(new OnClickListener() {
public void onClick(View v) {
Intent dialIntent = new Intent(Intent.ACTION_DIAL, Uri.parse("tel:"));
startActivity(dialIntent);
dispatchKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN,KeyEvent.FLAG_SOFT_KEYBOARD));
dispatchKeyEvent(new KeyEvent(KeyEvent.ACTION_UP, KeyEvent.KEYCODE_BACK));
}
});
}
//CallBacks from running Service
private final ICallDialogActivity.Stub iCallDialogActivity = new ICallDialogActivity.Stub(){
@Override
public void onStateChanged(int callState)
throws RemoteException {
switch(callState){
case GlobalData.CALL_STATUS_IDLE:
break;
case GlobalData.CALL_STATUS_DISCONNECTING:
byeSetup();
break;
}
};
public void byeSetup(){
((TextView)findViewById(R.id.time)).setText("Bye Text");
findViewById(R.id.keyboardimage).setOnClickListener(new OnClickListener() {
public void onClick(View v) {
//Void the Button
}});
}
bạn có thuộc lớp con không? onStateChange bị ghi đè ở đâu? – Pentium10
Xin chào Pentium10, nó được ghi đè thông qua giao diện AIDL và giao tiếp với Dịch vụ, Dịch vụ sẽ được thông báo về một số thay đổi và sau đó sẽ thông báo cho Hoạt động cập nhật TextView của nó dựa trên đó. Tôi đã thêm đoạn mã để chứng minh tốt hơn những gì tôi đang cố gắng, Lỗi dường như xuất hiện rất ngẫu nhiên và xuất hiện cả khi Hoạt động ở tiền cảnh và không xuất hiện. –
có thể trùng lặp của [CalledFromWrongThreadException] (http://stackoverflow.com/questions/3413544/calledfromwrongthreadexception) – jww