package com.werds.ishowup.dbcommunication; import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; import java.util.Iterator; import java.util.Map; import java.util.concurrent.ExecutionException; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpPost; import org.apache.http.impl.client.DefaultHttpClient; import android.os.AsyncTask; import android.util.Log; public class DatabaseCommunicator { protected String phpScriptURL; public DatabaseCommunicator(String url) { this.phpScriptURL = new String(url); } @SuppressWarnings("unchecked") public String execute(Map<String, String> parameters) { CommunicateTask communicator = new CommunicateTask(); try { return communicator.execute(parameters).get(); } catch (InterruptedException e) { e.printStackTrace(); return null; } catch (ExecutionException e) { e.printStackTrace(); return null; } } private class CommunicateTask extends AsyncTask<Map<String, String>, Void, String> { @Override protected String doInBackground(Map<String, String>... params) { Map<String, String> parameters = params[0]; String queryURL = assembleURL(parameters); Log.d("DatabaseCommunicator", "Requesting from URL: "+queryURL); String result = null; InputStream isr = null; try { HttpClient httpClient = new DefaultHttpClient(); HttpPost httpPost = new HttpPost(queryURL); HttpResponse HttpResponse = httpClient.execute(httpPost); HttpEntity HttpEntity = HttpResponse.getEntity(); isr = HttpEntity.getContent(); } catch (Exception e) { Log.e("DatabaseCommunicator", "Error in http connection " + e.toString()); } try { BufferedReader reader = new BufferedReader(new InputStreamReader(isr, "iso-8859-1"), 8); StringBuilder resultBuilder = new StringBuilder(); String line = null; while ((line = reader.readLine()) != null) { resultBuilder.append(line + "\n"); } isr.close(); result = new String(resultBuilder.toString()).trim(); } catch (Exception e) { Log.e("DatabaseCommunicator", "Error converting result " + e.toString()); } Log.d("DatabaseCommunicator", "Result: " + result); return result; } } /** * Get the full accessible URL of the communication * * @param params * @return URL String */ protected String assembleURL(Map<String, String> params) { return phpScriptURL + "?" + canonicalize(params); } /** * Canonicalize the parameters to fit the PHP URL style * * @param sortedParamMap * Parameter name-value pairs in lexicographical order. * @return Canonical form of query string. */ protected String canonicalize(Map<String, String> params) { if (params.isEmpty()) { return ""; } StringBuffer buffer = new StringBuffer(); Iterator<Map.Entry<String, String>> iter = params.entrySet().iterator(); while (iter.hasNext()) { Map.Entry<String, String> kvpair = iter.next(); buffer.append(kvpair.getKey()); buffer.append("="); buffer.append(kvpair.getValue()); if (iter.hasNext()) { buffer.append("&"); } } String cannoical = buffer.toString(); return cannoical; } }