J'ai un problème avec l'erreur suivante dans Android :
CalledFromWrongThreadException; : Seulement le thread original qui a créé une hiérarchie de vues peut toucher ses vues
Il semble que cela se produise lorsque j'essaie de mettre à jour un TextView dans mon activité, l'appel pour mettre à jour le TextView se fait à partir de mon activité mais je reçois toujours l'erreur ci-dessus.
Je l'ai comme ça :
onCreate() -met en place les boutons et la vue du texte.
onStateChange() - un écouteur pour les notifications sur les changements d'état, lorsqu'il reçoit une notification si le TextView est modifié pour afficher un texte différent.
Lorsque je reçois la notification d'un nouveau texte, j'essaie de modifier le TextView comme suit :
((TextView)findViewById(R.id.title)).setText("Some Text");
Mais je reçois l'erreur ci-dessus.
En cherchant sur Google, il semble que je doive utiliser un gestionnaire pour modifier le TextView ou peut-être utiliser AsyncTask ?
Quelqu'un peut-il expliquer lequel des deux serait le mieux à utiliser et pourquoi ?
EDIT : AJOUT DE BOUTS DE CODE :
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
}});
}
1 votes
Vous êtes dans une sous-classe ? onStateChange est surchargé où ?
0 votes
Bonjour Pentium10, il est surchargé via une interface AIDL et communique avec un service, le service sera notifié d'un changement et dira ensuite à l'activité de mettre à jour son TextView en fonction de cela. J'ai ajouté des extraits de code pour mieux démontrer ce que j'essaie de faire. L'erreur semble apparaître de façon très aléatoire et apparaît aussi bien lorsque l'activité est au premier plan que lorsqu'elle ne l'est pas.
1 votes
Duplicata possible de CalledFromWrongThreadException