Back to project page Go2-Rennes.
The source code is released under:
GNU General Public License
If you think the Android project Go2-Rennes listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.
/******************************************************************************* * Copyright (c) 2011 Michel DAVID mimah35-at-gmail.com * /*from ww w . j a va2 s.c o m*/ * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. ******************************************************************************/ package fr.gotorennes.remote; import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; import java.net.URLEncoder; import java.text.MessageFormat; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import org.apache.http.HttpEntity; 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.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import org.json.JSONTokener; import android.util.Log; public abstract class RemoteService<T> { private static final String TAG = "GoToRennes.RemoteService"; private static final String apiUrl = "http://data.keolis-rennes.com/json/?version={0}&key=FL8WIPQHEFFIIQI&cmd="; private static HttpClient httpclient = new DefaultHttpClient(); protected abstract T populate(JSONObject jsonObject) throws JSONException; protected abstract String getVersion(); protected T loadObject(String command, String nodeName, Map<String, String> parameters) { String commandeWithParameters = getCommandWithParameters(command, parameters); JSONObject data = getData(commandeWithParameters); if (data != null) { try { onDataLoad(data); return populate(data.getJSONObject(nodeName)); } catch (Exception e) { Log.e(TAG, "Echec de lecture de la rponse du service distant : " + e.getMessage()); } } return null; } protected List<T> loadList(String command, String nodeName, Map<String, String> parameters) { String commandeWithParameters = getCommandWithParameters(command, parameters); JSONObject data = getData(commandeWithParameters); List<T> result = null; if (data != null) { try { onDataLoad(data); try { JSONArray jsonArray = data.optJSONArray(nodeName); if (jsonArray != null) { result = new ArrayList<T>(); for (int i = 0; i < jsonArray.length(); i++) { JSONObject jsonObject = jsonArray.getJSONObject(i); result.add(populate(jsonObject)); } } else { JSONObject jsonObject = data.optJSONObject(nodeName); if (jsonObject != null) { result = new ArrayList<T>(); result.add(populate(jsonObject)); } } } catch (Exception e) { } } catch (Exception e) { Log.e(TAG, "Echec de lecture de la rponse du service distant : " + e.getMessage()); } } return result; } protected void onDataLoad(JSONObject data) throws JSONException { // Nothing } protected List<T> loadList(String command, String nodeName) { return loadList(command, nodeName, new HashMap<String, String>()); } protected String getCommandWithParameters(String command, Map<String, String> parameters) { StringBuilder stringBuilder = new StringBuilder(command); for (Map.Entry<String, String> entry : parameters.entrySet()) { stringBuilder.append("¶m["); stringBuilder.append(entry.getKey()); stringBuilder.append("]="); stringBuilder.append(URLEncoder.encode(entry.getValue())); } return stringBuilder.toString(); } protected JSONObject getData(String command) { String url = MessageFormat.format(apiUrl, getVersion()) + command; Log.d("GoToRennes", url); HttpEntity entity = getEntity(url); if (entity == null) { return null; } String json = readFully(entity); if (json == null) { return null; } try { JSONObject object = (JSONObject) new JSONTokener(json).nextValue(); JSONObject opendata = object.getJSONObject("opendata"); JSONObject answer = opendata.getJSONObject("answer"); return answer.optJSONObject("data"); } catch (Exception e) { Log.e(TAG, "Echec de lecture de la rponse du service distant : " + e.getMessage()); } return null; } public static HttpEntity getEntity(String url) { HttpGet httpget = new HttpGet(url); try { HttpResponse response = httpclient.execute(httpget); if (response != null) { return response.getEntity(); } } catch (Exception e) { Log.e(TAG, "Echec d'accs au service distant : " + e.getMessage()); } return null; } public static String readFully(String url) { HttpEntity entity = getEntity(url); if (entity == null) { return null; } return readFully(entity); } public static String readFully(HttpEntity entity) { InputStream instream = null; try { instream = entity.getContent(); BufferedReader reader = new BufferedReader(new InputStreamReader(instream)); StringBuilder json = new StringBuilder(); String line = null; while ((line = reader.readLine()) != null) { json.append(line); } return json.toString(); } catch (Exception e) { Log.e(TAG, "Echec de lecture de la rponse du service distant : " + e.getMessage()); } finally { if (instream != null) { try { instream.close(); } catch (Exception e) { Log.e(TAG, "Echec de fermeture du flux du service distant : " + e.getMessage()); } } } return null; } }