package bus.ticketer.connection; import java.io.*; import java.net.*; import java.util.*; import org.apache.http.*; import org.apache.http.message.*; import org.json.*; public class ConnectionRunnable implements Runnable { private String link, resultString, method; private ArrayList<NameValuePair> payload; private int readTimeout = 10000, connectionTimeout = 15000; private JSONObject resultObject; public ConnectionRunnable(String link, String method, ArrayList<NameValuePair> payload) { this.link = link; this.method = method; this.payload = payload; } @Override public void run() { connect(); } private void connect() { HttpURLConnection con = null; String line = ""; StringBuffer sb = new StringBuffer(); try { URL url = new URL(link); con = (HttpURLConnection) url.openConnection(); con.setReadTimeout(readTimeout); con.setConnectTimeout(connectionTimeout); con.setRequestMethod(method); con.setDoInput(true); if (payload != null) { con.setDoOutput(true); ArrayList<NameValuePair> params = new ArrayList<NameValuePair>(); for (NameValuePair pair : payload) params.add(new BasicNameValuePair(pair.getName(), pair .getValue())); OutputStream os = con.getOutputStream(); BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(os, "UTF-8")); writer.write(getQuery(params)); writer.flush(); writer.close(); os.close(); } // Start the connection con.connect(); // Read results from the query BufferedReader reader = new BufferedReader(new InputStreamReader( con.getInputStream(), "UTF-8")); while ((line = reader.readLine()) != null) sb.append(line); resultString = sb.toString(); try { setResultObject(new JSONObject(resultString)); } catch (JSONException e) { //Can't parse to JSONObject } reader.close(); } catch (IOException e) { //Can't connect to the server } finally { if (con != null) con.disconnect(); } } private String getQuery(List<NameValuePair> params) throws UnsupportedEncodingException { StringBuilder result = new StringBuilder(); boolean first = true; for (NameValuePair pair : params) { if (first) first = false; else result.append("&"); result.append(URLEncoder.encode(pair.getName(), "UTF-8")); result.append("="); result.append(URLEncoder.encode(pair.getValue(), "UTF-8")); } return result.toString(); } public JSONObject getResultObject() { return resultObject; } public void setResultObject(JSONObject resultObject) { this.resultObject = resultObject; } }