Bonjour à tous,
je cherche à faire un simple envoi en get sur une url distante.
J'utilise l'emulateur sur un pc windows avec le bundle fourni par google : adt-bundle-windows-x86
Pour faire au plus simple, je suis parti d'un nouveau projet qui fonctionne, le projet à la base est bien formé et l'emulateur repond bien, j'ai bien le "Hello World" qui s'affiche.
A partir de là j'ai modifié le code pour jouer une simple requete GET.
Vous pourrez voir mon code ci-dessous (j'ai laissé les imports, mais sur ce point ça doit être bon, je fais confiance à eclipse : ctrl+shift+o) :
Vous constaterez que j'ai mis une url locale pour tester, mais j'ai également testé sur une url web qui m'appartient et ça ne fonctionne pas non plus.
J'ai ajouté la permission dans le manifeste tel que (cf en bleu) :
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 package com.test.testpost; import java.io.IOException; import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.client.DefaultHttpClient; import android.app.Activity; import android.os.Bundle; import android.util.Log; import android.view.Menu; public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); HttpClient client = new DefaultHttpClient(); HttpGet request = new HttpGet("http://10.0.2.2/android/index.php"); try { Log.i("test get", "test get avant requete"); client.execute(request); Log.i("test get", "test get apres requete"); } catch (IOException e) { Log.i("test get", "test get exception levee 2"); e.printStackTrace(); } } // fin de la methode } // fin de la classe
mon script sur lequel je tape est en php, il devrait me créer un fichier (j'ai testé l'url en direct via un navigateur, le fichier est créé) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.test.testpost" android:versionCode="1" android:versionName="1.0" > <uses-permission android:name="android.permission.INTERNET"></uses-permission> <!-- suite du code cree par eclipse pour un nouveau projet -->
Lorsque j'execute ce code, l'application Android crache : "L'application testPost s'est arretee".
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 <?php $data = "post : ". print_r($_POST, true)." get : ".print_r($_GET, true); file_put_contents("dataGeoCool.txt", $data); echo "toto";
La derniere chaine logguée par mes soins est : "test get avant requete", ce qui sous entend que l'appelle de la commande "execute" cause le soucis.
Voici une partie de ce que j'ai dans le LogCat :
Certains post sur internet suggère de faire une tache en asynchrone pour lancer un nouveau process. Toutefois, je ne suis pas convaincu de cette action car pour l'instant, je ne vois pas pourquoi ma requete n'atteindrait pas mon script PHP (à la reception, un fichier devrait etre créé coté serveur) => je ne cherche pas a recuperer une information suite au lancement de ma requete GET sur mon terminal.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 03-16 14:28:20.559: I/test get(17025): test get avant requete 03-16 14:28:20.812: D/AndroidRuntime(17025): Shutting down VM 03-16 14:28:20.892: W/dalvikvm(17025): threadid=1: thread exiting with uncaught exception (group=0x40a70930) 03-16 14:28:20.972: E/AndroidRuntime(17025): FATAL EXCEPTION: main 03-16 14:28:20.972: E/AndroidRuntime(17025): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.test.testpost/com.test.testpost.MainActivity}: android.os.NetworkOnMainThreadException 03-16 14:28:20.972: E/AndroidRuntime(17025): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2180)
Donc meme si ma partie client android attendait une reponse jusqu'à planter, je devrais avoir mon fichier créé sur le serveur.
Auriez-vous une idée sur la raison pour laquelle je n'arrive pas à atteindre mon script php en mode GET ?
Merci d'avance pour votre retour.
Partager