2011-10-06 5 views
-1

J'ai une classe appelée Main qui étend l'activité. Dans cette classe j'ai défini une autre classe qui étend le fil. Je veux placer le texte dans un textView d'une méthode de la classe myThread. J'ai débogué mon programme mais quand je veux placer le texte dans le textview il indique que la source n'est pas trouvée.Reconnaître textview dans une autre classe définie dans la même activité - Android

Voici mon code. J'espère que vous comprendrez mieux ce que je veux expliquer.

Cela se produit lorsque je clique sur un bouton. Ceci provient de ma fonction onCreate dans la classe Main.

b.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View arg0) {  
      pd = ProgressDialog.show(Main.this, "", "Downloading Data...", true, false); 
      MyThread mThread = new MyThread(); 
      mThread.start(); 

       } 
    }); 

Ceci est la classe myThread. Le résultat String est une chaîne qui est restaurée par une fonction définie dans ma classe Main. J'ai vérifié et le résultat est OK. Le programme s'arrête quand je tends la ligne

 tv.setText(result); 

La chose étrange est qu'il ne comporte aucune erreur à la ligne

 TextView tv=(TextView) findViewById(R.id.textView5); 

Merci pour toute aide donnée! : D

 @Override 
     public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 

    tv=(TextView) findViewById(R.id.textView5); 
    Button b=(Button) findViewById(R.id.button1); 
    final EditText et1=(EditText) findViewById(R.id.editText1); 
    b.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View arg0) {  
      pd = ProgressDialog.show(Main.this, "", "Downloading Data...", true, false); 
      Log.d("asinc","inainte d downloadtask"); 
      // Start a new thread that will download all the data 
      MyThread mThread = new MyThread(); 
      mThread.start(); 
      //parse(); 
       } 
    }); 

Répondre

0

Peut-être me manque soomething, mais pourquoi d'accéder aux composants de l'interface utilisateur de fil non principal? Pour autant que je sache, l'interface utilisateur n'est pas thread safe; et donc je suggère d'utiliser AsyncTask au lieu de Thread. Dans ce cas, vous pouvez placer votre code proessing principal dans la méthode doInBackground et tout l'accès au composant UI dans onPostExecute (onPostExecute est appelé depuis le thread principal après la fin de l'exécution de la tâche).

+0

Je vais essayer avec AsyncTask et vous dire si j'ai réussi à résoudre le problème. – Lara

+0

Je l'ai résolu! Je vous remercie! – Lara

0

essayer de mettre dans votre classe principale dans le onCreate()

private TextView tv; //declare as global so you can used into the subclass or into the methods 

onCreate(){ 
    tv=(TextView) findViewById(R.id.textView5); 
} 

puis utilisé dans le fil

+0

Toujours le même problème. Ça ne marche pas. – Lara

+0

le code est plutôt grand. Je vais essayer de vous montrer les parties qui vous intéressent. – Lara

+0

RelativeLayout xmlns: android = "http://schemas.android.com/apk/res/android" \t android: layout_width = "fill_parent "android: layout_height =" fill_parent " \t android: orientation = "vertical" android: background = "@ drawable/earth2medium"> \t \t Lara

Questions connexes