Bonjour,

Je développe une application qui récupère des données via JSON.

J'ai réussi à afficher ces données dans une application toute simple qui ne gère que ça. Mais intégrer à ma "principale" application, j'obtiens l'erreur suivante :
Error in http connexion android.os.NetworkOnMainThreadException
J'ai trouvé sur internet qu'il faut créer un thread ou une asynctask pour ne pas utiliser le "main thread" de l'application ou quelque chose dans cet esprit la...

Malgré tous les exemples que j'ai pu étudier, je n'arrive pas à savoir par où commencer.

Voici mon code :

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
public class ListeProduits extends Activity {
 
	TextView txt;
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.liste_produits);
 
		LinearLayout rootLayout = new LinearLayout(getApplicationContext());  
		txt = new TextView(getApplicationContext());  
		rootLayout.addView(txt);  
		setContentView(rootLayout);  
 
		// Définir le texte et appeler la fonction de connexion.  
		txt.setText("Connexion..."); 
		// Appeler la méthode pour récupérer les données JSON
		txt.setText(getServerData(strURL)); 
	}
 
	// Mettre l'adresse du script PHP
	// Attention localhost ou 127.0.0.1 ne fonctionnent pas. Mettre l'adresse IP local.
	public static final String strURL = "http://xxxx.free.fr/xxx.php";
 
	private String getServerData(String returnString) {
		InputStream is = null;
		String result = "";
		// Envoyer la requête au script PHP.
		// Script PHP : $sql=mysql_query("select * from tblVille where Nom_ville like '".$_REQUEST['ville']."%'");
		// $_REQUEST['ville'] sera remplacé par L dans notre exemple.
		// Ce qui veut dire que la requête enverra les villes commençant par la lettre L
		ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
		nameValuePairs.add(new BasicNameValuePair("Nom", "L"));
 
		// Envoie de la commande http
		try{
			HttpClient httpclient = new DefaultHttpClient();
			HttpPost httppost = new HttpPost(strURL);
			httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
			HttpResponse response = httpclient.execute(httppost);
			HttpEntity entity = response.getEntity();
			is = entity.getContent();
 
		}catch(Exception e){
			Log.e("log_tag", "Error in http connection " + e.toString());
		}
 
		// Convertion de la requête en string
		try{
			BufferedReader reader = new BufferedReader(new InputStreamReader(is,"iso-8859-1"),8);
			//"iso-8859-1"
			StringBuilder sb = new StringBuilder();
			String line = null;
			while ((line = reader.readLine()) != null) {
				sb.append(line + "\n");
			}
			is.close();
			result=sb.toString();
		}catch(Exception e){
			Log.e("log_tag", "Error converting result " + e.toString());
		}
		// Parse les données JSON
		try{
 
			JSONArray jArray = new JSONArray(result);
			for(int i=0;i<jArray.length();i++){
				JSONObject json_data = jArray.getJSONObject(i);
				// Affichage Produit et Prix dans le LogCat
				Log.i("log_tag","Produit: "+json_data.getString("Produit")+
						", Prix: "+json_data.getInt("Prix")
				);
 
				// Résultats de la requête
				returnString += "\n\t" + jArray.getJSONObject(i); 
			}
		}catch(JSONException e){
			Log.e("log_tag", "Error parsing data " + e.toString());
		}
		return returnString; 
	}
}
Un petit coup de pouce ne serait pas de refus ^^

Merci de l'attention que vous accorderez à mon problème

GJuubz