symfony android client
Par Jean-Philippe Serafin le lundi, novembre 30 2009, 08:01 - Lien permanent
Voici deux petites classes permettant de faire des requêtes sur une application symfony depuis android tout en respectant l'architecture REST des modules.
Le client (singleton pour conserver la session) :
package org.me.sfBackendClient; import org.apache.http.impl.client.DefaultHttpClient; /** * symfony application client singleton * thanks to Cansin http://senior.ceng.metu.edu.tr/2009/praeda/2009/01/11/a-simple-restful-client-at-android/ * @author jean-philippe serafin <jean-philippe.serafin@dev-solutions.fr> */ public class sfClient{ private static sfClient instance; protected DefaultHttpClient httpClient; /** * constructor */ private sfClient(){ this.httpClient = new DefaultHttpClient(); } /** * instance accessor */ public static sfClient getInstance(){ if(null == instance){ instance = new sfClient(); } return instance; } /** * creating new request */ public sfRequest createRequest(){ sfRequest request = new sfRequest(this.httpClient); return request; } }
Les requêtes :
package org.me.sfBackendClient; //IO import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; //utils import java.util.List; import java.util.ArrayList; //apache import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.client.ClientProtocolException; import org.apache.http.client.entity.UrlEncodedFormEntity; import org.apache.http.client.methods.*; import org.apache.http.NameValuePair; import org.apache.http.message.BasicNameValuePair; import org.apache.http.impl.client.DefaultHttpClient; /** * symfony request * thanks to Cansin http://senior.ceng.metu.edu.tr/2009/praeda/2009/01/11/a-simple-restful-client-at-android/ * @author jean-philippe serafin <jean-philippe.serafin@dev-solutions.fr> */ public class sfRequest{ protected String url; protected String method; protected List<NameValuePair> params; protected HttpGet getRequest; protected HttpPost postRequest; protected HttpResponse response; protected String result; protected DefaultHttpClient httpClient; /** * constructor */ public sfRequest(DefaultHttpClient client){ this.httpClient = client; this.params = new ArrayList<NameValuePair>(2); } public void setUrl(String url){ this.url = url; } public String getUrl(){ return this.url; } public void setMethod(String method){ this.method = method; } public String getMethod(){ return this.method; } /** * Adding parameter * @param key * @param value */ public void addParam(String key, String value){ this.params.add(new BasicNameValuePair(key, value)); } /** * getting response text * @return String response */ public String getResult(){ return this.result; } /** * executing request */ public void execute(){ try { if(this.method.compareToIgnoreCase("GET") == 0){ this.getRequest = new HttpGet(this.getUrl()); this.response = this.httpClient.execute(this.getRequest); }else if(this.method.compareToIgnoreCase("POST") == 0 || this.method.compareToIgnoreCase("PUT") == 0 || this.method.compareToIgnoreCase("DELETE") == 0){ this.addParam("sf_method", this.getMethod()); this.postRequest = new HttpPost(this.getUrl()); this.postRequest.setEntity(new UrlEncodedFormEntity(this.params)); this.response = this.httpClient.execute(this.postRequest); } HttpEntity entity = response.getEntity(); if(entity != null){ InputStream inputStream = entity.getContent(); this.result = convertStreamToString(inputStream); } } catch (ClientProtocolException e) { //e.printStackTrace(); this.result = e.getMessage(); } catch (IOException e) { this.result = e.getMessage(); } } /** * converting stream reader to string * @return String */ private static String convertStreamToString(InputStream is) { BufferedReader reader = new BufferedReader(new InputStreamReader(is)); StringBuilder stringBuilder = new StringBuilder(); String line = null; try { while ((line = reader.readLine()) != null) { stringBuilder.append(line + "\n"); } } catch (IOException e) { e.printStackTrace(); } finally { try { is.close(); } catch (IOException e) { e.printStackTrace(); } } return stringBuilder.toString(); } }
L'utilisation est très simple :
sfRequest request = sfClient.getInstance().createRequest(); request.setUrl("http://xxxxxxxxx/androidConnect/connect"); request.setMethod("POST"); request.addParam("login", loginField.getText().toString()); request.addParam("password", passwordField.getText().toString()); request.execute(); String message = request.getResult();
Merci à Cansin