Android : envoi de requete get avec l'emulateur
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.
Code:
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 |
J'ai ajouté la permission dans le manifeste tel que (cf en bleu) :
Code:
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 --> |
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:
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"; |
Lorsque j'execute ce code, l'application Android crache : "L'application testPost s'est arretee".
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 :
Code:
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) |
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.
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.