Tengo un problema con el siguiente error en Android:CalledFromWrongThreadException: Sólo el hilo original que creó una jerarquía de vistas puede tocar puntos de vista
CalledFromWrongThreadException ;: Sólo el hilo original que creó una jerarquía vista puede tocar sus puntos de vista
Parece que suceda cuando trato de actualizar un Textview en mi actividad, la llamada para actualizar el TextView es de dentro de mi actividad, pero todavía consigo el error anterior.
lo tengo así:
onCreate(): establece los botones y la vista de texto.
onStateChange() - un detector de notificaciones sobre cambios de estado, cuando recibe una notificación si cambia el TextView para decir un texto diferente.
Cuando llego a la notificación de un nuevo texto que tratan de cambiar el modo de Vista de Texto como:
((TextView)findViewById(R.id.title)).setText("Some Text");
pero me sale el error anterior.
Al buscar en Google, parece que debo usar un controlador para cambiar el TextView o tal vez usar AsyncTask?
¿Alguien podría explicar cuál sería mejor usar y por qué?
EDIT: Añadido fragmentos de código:
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
}});
}
¿Estás en una subclase? onStateChange se reemplaza donde? – Pentium10
Hola Pentium10, se invalida mediante una interfaz AIDL y se comunica con un Servicio, el Servicio recibirá una notificación de algún cambio y luego le indicará a la Actividad que actualice su TextView en función de eso. He agregado fragmentos de código para demostrar mejor lo que estoy intentando. El error parece aparecer de forma muy aleatoria y aparece cuando la Actividad está en primer plano y no. –
posible duplicado de [CalledFromWrongThreadException] (http://stackoverflow.com/questions/3413544/calledfromwrongthreadexception) – jww