Récupération des données via REST Web services
Bonjour à tous,
Comme dit dans le titre j'aimerais récupérer des données de plusieurs campus (pour commencer je n'en prends qu'un seul) à partir de la méthode Http GET sur un site que j'ai crée en local, depuis mon app Android.
Voici une méthode que j'ai crée dans cet objectif:
classe WebCampus:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| public Campus convertToCampus(JSONObject object) throws JSONException{
webManager = new WebServiceManager();
webManager.sendGetRequest("http://10.0.2.2:8080/NoteTonSTA/rest/campuses/1");//tester url
campus = new Campus();
//récupération des attributs json de l'url
try {
campus.setName(object.getString("name"));
campus.setId(object.getLong("id"));
} catch (Exception e) {
String tag = "WebCampusError";
Log.e(tag , "impossible de parser les attributs: "+e.getMessage(),e);
}
return campus;//on retourne un objet campus
} |
Les données à récupérer sont de cette forme (en JSON):
Code:
{"id":"1","name":"Lyon"}
Voici mon activity:
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 44 45 46 47 48 49 50 51 52
| package com.supinfo.notetonsta;
import org.json.JSONException;
import org.json.JSONObject;
import com.supinfo.notetonsta.model.Campus;
import com.supinfo.notetonsta.web.WebCampus;
import android.app.Activity;
import android.os.Bundle;
import android.widget.LinearLayout;
import android.widget.ListAdapter;
import android.widget.ListView;
//main activity
public class NoteTonSTA2Activity extends Activity {
/** Called when the activity is first created. */
Campus campus;
LinearLayout mainLayout;//layout principal
ListView listView;//listView du main.xml
ListAdapter la;
JSONObject object;
WebCampus webCampus;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
object = new JSONObject();
webCampus = new WebCampus();
try {
//on va lister tous les campus dans cette activity
campus = webCampus.convertToCampus(object);
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void addCampus(){
}
} |
Et pour finir mon WebServiceManager pour la connexion:
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 44 45 46 47
| package com.supinfo.notetonsta.util;
import java.net.URI;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;
import android.util.Log;
public class WebServiceManager {
private String result;
private HttpClient httpClient;
private HttpGet httpGet;
private URI uri;
public String sendGetRequest(String address){
result = null;
try {
httpClient = new DefaultHttpClient();
httpGet = new HttpGet();
uri = new URI(address);
httpGet.setURI(uri);
HttpResponse response = httpClient.execute(httpGet);//on execute la requête http
result = EntityUtils.toString(response.getEntity());
} catch (Exception e) {
Log.e(address, "Connexion impossible, problème de droit ou de port deja utilise: "+e.getMessage(),e);
}
return result;
}
public WebServiceManager() {
}
} |
Le problème c'est que je lève l'exception suivante (logs):
Code:
03-28 03:09:47.619: E/WebCampusError(5192): impossible de parser les attributs: No value for name
Mon objectif serait donc de récupérer l'attribut 'name' ainsi que l'attribut 'id' pour pouvoir ensuite les afficher. Quelqu'un aurait-il des idées à ce sujet?