Bonjour à tous,

Ça fais quelque jours que j'ai commencé à développer sous android, et aujourd'hui j'ai un problème que je n'arrive pas à résoudre.

Voici mon problème: j'utilise ma classe graphique "Chargement.java" qui permet d'afficher graphiquement (Activity) l'état d'avancement du thread qui tourne en fond de tache.
Dans mon Thread en fond de tache je simule le travail par des sleep(); et j'envoi des messages à l'aide du Handler.

Mais lorsque je traite le message dans la fonction "traitement_message(msg)" dans la classe "Chargement.java" je tente de faire une setText(); sur mes textView mais j'ai une erreur Fatal et l'application se ferme

Mon interface xml chargement.xml:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?xml version="1.0" encoding="utf-8"?>
<GridLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@drawable/chargement"
    android:columnCount="1" >
 
    <TextView
        android:id="@+id/id_view_chargement"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_column="0"
        android:layout_gravity="left|center_vertical"
        android:layout_row="1"
        android:gravity="center"
        android:text="initialisation ..." />
 
    <ProgressBar
        android:id="@+id/id_progress_chargement"
        android:layout_column="0"
        android:layout_gravity="center"
        android:layout_row="1" />
 
</GridLayout>
voici ma classe "Chargement.java":

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
package com.example.barryplayer;
 
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.widget.ProgressBar;
import android.widget.TextView;
 
public class Chargement  extends Activity {	
 
	//===========================================
	// Variables
	//===========================================
	TextView text_chargement;
	ProgressBar progress_chargement ;
	// Code retour thread
	int CALCUL_IP_BROAD = 10;
	int RECHERCHE_RASPBERRY = 11;
	int CONNEXION_RASPBERRY = 12;
	int CONNECTE_RASPBERRY = 13;
 
	//===========================================
	// Handler
	//===========================================
	final Handler handler = new Handler(){
		@Override
		public void handleMessage(Message msg){
			// Traitement du message provenant du ThreadTravail
			traitement_message(msg);
		}
	};
 
	//===========================================
	// instenciation Classes
	//===========================================
	ThreadTravail threadT = new ThreadTravail(handler);
 
 
	//===========================================
	// onCreate
	//===========================================
	@Override
	protected void onCreate(Bundle mBundle) {
		// TODO Auto-generated method stub
		super.onCreate(mBundle);
 
		// Initialisation de l'interface
		text_chargement = (TextView)findViewById(R.id.id_view_chargement);
		progress_chargement = (ProgressBar)findViewById(R.id.id_progress_chargement);
 
		// Affichage de l'interface
		setContentView(R.layout.chargement);
	}
 
	//===========================================
	// onStart
	//===========================================
	@Override
	protected void onStart() {
		// TODO Auto-generated method stub
		super.onStart();
		// Execution du Thread de travail
		Thread thread1 = new Thread(threadT);
		thread1.start();
	}
 
	//===========================================
	// traitement_message(msg)
	//===========================================
	public void traitement_message(Message msg){
		if (msg.what == CALCUL_IP_BROAD){
			text_chargement.setText("Calcul broadcast ...");
		}
		else if (msg.what == RECHERCHE_RASPBERRY){
			text_chargement.setText("Recherche raspberry ...");
		}
		else if (msg.what == CONNEXION_RASPBERRY){
			text_chargement.setText("Connexion raspberry ...");
		}
		else if (msg.what == RECHERCHE_RASPBERRY){
			text_chargement.setText("connecté !");
			progress_chargement.setVisibility(progress_chargement.INVISIBLE);
		}
	}
 
}
et ma classe de ThreadTravail.java:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
package com.example.barryplayer;
 
import android.os.Handler;
import android.util.Log;
 
public class ThreadTravail implements Runnable {
 
	//===========================================
	// Variables
	//===========================================
	Handler mHandler;
 
	public ThreadTravail (Handler handler) {
		mHandler = handler;
	}
 
	@Override
	public void run() {
		// TODO Auto-generated method stub
		Log.d("smp", "Thread: Début du Thread ...");
		try {
			Log.d("smp", "Thread: Simulation calcul ip Broadcast ...");
			Thread.sleep(2000,0);
			mHandler.sendEmptyMessage(10);
			Log.d("smp", "Thread: Simulation recherche rasberry ...");
			Thread.sleep(2000,0);
			mHandler.sendEmptyMessage(11);
			Log.d("smp", "Thread: Simulation connexion ...");
			Thread.sleep(2000,0);
			mHandler.sendEmptyMessage(12);
			Log.d("smp", "Thread: Simulation connexion réussi !");
			Thread.sleep(2000,0);
			mHandler.sendEmptyMessage(13);
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
 
 
 
}
Voilà j'espère que je me suis bien exprimé