Java tutorial
/* * Copyright 2011 Jeremy Haberman * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.jeremyhaberman.playgrounds; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.URL; import java.util.ArrayList; import java.util.Collection; import java.util.List; import org.apache.http.HttpResponse; import org.apache.http.NameValuePair; import org.apache.http.StatusLine; import org.apache.http.client.ClientProtocolException; import org.apache.http.client.HttpClient; import org.apache.http.client.entity.UrlEncodedFormEntity; import org.apache.http.client.methods.HttpPost; import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.message.BasicNameValuePair; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import com.google.android.maps.GeoPoint; import android.app.Activity; import android.content.Context; import android.content.Intent; import android.location.Location; import android.util.Log; public class WebPlaygroundDAO extends Activity implements PlaygroundDAO { private static final String TAG = "WebPlaygroundDAO"; private static final String LATITUDE_PARAM = "latitude"; private static final String LONGITUDE_PARAM = "longitude"; private static final String MAX_PARAM = "max"; private static final String TYPE_PARAM = "type"; private static final String TOP_LEFT_LATITUDE_PARAM = "topleftlat"; private static final String TOP_LEFT_LONGITUDE_PARAM = "topleftlong"; private static final String BOTTOM_RIGHT_LATITUDE_PARAM = "botrightlat"; private static final String BOTTOM_RIGHT_LONGITUDE_PARAM = "botrightlong"; private static final String NEARBY = "nearby"; private static final String WITHIN = "within"; private static final int MAX_QUANTITY = 1000; private Collection<Playground> playgrounds; private Playgrounds swingset; private Context context; WebPlaygroundDAO(Playgrounds swingset) { this.swingset = swingset; } WebPlaygroundDAO(Context context) { this.context = context; } @Override public int createPlayground(String name, String description, int latitude, int longitude) { int result = 0; // Create a new HttpClient and Post Header HttpClient httpclient = new DefaultHttpClient(); HttpPost httppost = new HttpPost("http://swingsetweb.appspot.com/playground"); try { // Add your data List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2); nameValuePairs.add(new BasicNameValuePair("name", name)); nameValuePairs.add(new BasicNameValuePair("description", description)); nameValuePairs.add(new BasicNameValuePair("latitude", Integer.toString(latitude))); nameValuePairs.add(new BasicNameValuePair("longitude", Integer.toString(longitude))); httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); // Execute HTTP Post Request HttpResponse response = httpclient.execute(httppost); StatusLine status = response.getStatusLine(); int statusCode = status.getStatusCode(); if (statusCode != 200) { result = statusCode; } } catch (ClientProtocolException e) { result = -1; } catch (IOException e) { result = -1; } return result; } @Override public boolean deletePlayground(Context context, int id) { // TODO Auto-generated method stub return false; } @Override public Collection<Playground> getAll(Context context) { // synchronized (Swingset.initPlaygroundLock) { playgrounds = new ArrayList<Playground>(); String result = swingset.getResources().getString(R.string.error); HttpURLConnection httpConnection = null; Log.d(TAG, "getPlaygrounds()"); try { // Check if task has been interrupted if (Thread.interrupted()) { throw new InterruptedException(); } // Build query URL url = new URL("http://swingsetweb.appspot.com/playground"); httpConnection = (HttpURLConnection) url.openConnection(); httpConnection.setConnectTimeout(15000); httpConnection.setReadTimeout(15000); StringBuilder response = new StringBuilder(); if (httpConnection.getResponseCode() == HttpURLConnection.HTTP_OK) { // Read results from the query BufferedReader input = new BufferedReader( new InputStreamReader(httpConnection.getInputStream(), "UTF-8")); String strLine = null; while ((strLine = input.readLine()) != null) { response.append(strLine); } input.close(); } // Parse to get translated text JSONArray jsonPlaygrounds = new JSONArray(response.toString()); int numOfPlaygrounds = jsonPlaygrounds.length(); JSONObject jsonPlayground = null; for (int i = 0; i < numOfPlaygrounds; i++) { jsonPlayground = jsonPlaygrounds.getJSONObject(i); playgrounds.add(toPlayground(jsonPlayground)); } } catch (Exception e) { Log.e(TAG, "Exception", e); Intent errorIntent = new Intent(context, Playgrounds.class); errorIntent.putExtra("Exception", e.getLocalizedMessage()); errorIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); context.startActivity(errorIntent); } finally { if (httpConnection != null) { httpConnection.disconnect(); } } // all done Log.d(TAG, " -> returned " + result); return playgrounds; // } } protected void setPlaygrounds(Collection<Playground> playgrounds) { this.playgrounds = playgrounds; } private Playground toPlayground(JSONObject jsonPlayground) throws JSONException { String name = jsonPlayground.getString("name"); String description = jsonPlayground.getString("description"); int latitude = jsonPlayground.getInt("latitude"); int longitude = jsonPlayground.getInt("longitude"); return new Playground(name, description, latitude, longitude); } @Override public Collection<Playground> getNearby(Context context, GeoPoint location) { return getNearby(context, location, MAX_QUANTITY); } @Override public Collection<Playground> getNearby(Context context, GeoPoint location, int maxQuantity) { playgrounds = new ArrayList<Playground>(); String result = swingset.getResources().getString(R.string.error); HttpURLConnection httpConnection = null; Log.d(TAG, "getPlaygrounds()"); try { // Build query URL url = new URL("http://swingsetweb.appspot.com/playground?" + TYPE_PARAM + "=" + NEARBY + "&" + LATITUDE_PARAM + "=" + location.getLatitudeE6() + "&" + LONGITUDE_PARAM + "=" + location.getLongitudeE6() + "&" + MAX_PARAM + "=" + Integer.toString(maxQuantity)); httpConnection = (HttpURLConnection) url.openConnection(); httpConnection.setConnectTimeout(15000); httpConnection.setReadTimeout(15000); StringBuilder response = new StringBuilder(); if (httpConnection.getResponseCode() == HttpURLConnection.HTTP_OK) { // Read results from the query BufferedReader input = new BufferedReader( new InputStreamReader(httpConnection.getInputStream(), "UTF-8")); String strLine = null; while ((strLine = input.readLine()) != null) { response.append(strLine); } input.close(); } // Parse to get translated text JSONArray jsonPlaygrounds = new JSONArray(response.toString()); int numOfPlaygrounds = jsonPlaygrounds.length(); JSONObject jsonPlayground = null; for (int i = 0; i < numOfPlaygrounds; i++) { jsonPlayground = jsonPlaygrounds.getJSONObject(i); playgrounds.add(toPlayground(jsonPlayground)); } } catch (Exception e) { Log.e(TAG, "Exception", e); Intent errorIntent = new Intent(context, Playgrounds.class); errorIntent.putExtra("Exception", e.getLocalizedMessage()); errorIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); context.startActivity(errorIntent); } finally { if (httpConnection != null) { httpConnection.disconnect(); } } Log.d(TAG, " -> returned " + result); return playgrounds; } @Override public Collection<? extends Playground> getWithin(Context context, GeoPoint topLeft, GeoPoint bottomRight, int maxQuantity) { playgrounds = new ArrayList<Playground>(); String result = swingset.getResources().getString(R.string.error); HttpURLConnection httpConnection = null; Log.d(TAG, "getPlaygrounds()"); try { // Check if task has been interrupted if (Thread.interrupted()) { throw new InterruptedException(); } // Build query URL url = new URL("http://swingsetweb.appspot.com/playground?" + TYPE_PARAM + "=" + WITHIN + "&" + TOP_LEFT_LATITUDE_PARAM + "=" + topLeft.getLatitudeE6() / 1E6 + "&" + TOP_LEFT_LONGITUDE_PARAM + "=" + topLeft.getLongitudeE6() / 1E6 + "&" + BOTTOM_RIGHT_LATITUDE_PARAM + "=" + bottomRight.getLatitudeE6() / 1E6 + "&" + BOTTOM_RIGHT_LONGITUDE_PARAM + "=" + bottomRight.getLongitudeE6() / 1E6); httpConnection = (HttpURLConnection) url.openConnection(); httpConnection.setConnectTimeout(15000); httpConnection.setReadTimeout(15000); StringBuilder response = new StringBuilder(); if (httpConnection.getResponseCode() == HttpURLConnection.HTTP_OK) { // Read results from the query BufferedReader input = new BufferedReader( new InputStreamReader(httpConnection.getInputStream(), "UTF-8")); String strLine = null; while ((strLine = input.readLine()) != null) { response.append(strLine); } input.close(); } // Parse to get translated text JSONArray jsonPlaygrounds = new JSONArray(response.toString()); int numOfPlaygrounds = jsonPlaygrounds.length(); JSONObject jsonPlayground = null; for (int i = 0; i < numOfPlaygrounds; i++) { jsonPlayground = jsonPlaygrounds.getJSONObject(i); playgrounds.add(toPlayground(jsonPlayground)); } } catch (Exception e) { Log.e(TAG, "Exception", e); Intent errorIntent = new Intent(context, Playgrounds.class); errorIntent.putExtra("Exception", e.getLocalizedMessage()); errorIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); context.startActivity(errorIntent); } finally { if (httpConnection != null) { httpConnection.disconnect(); } } Log.d(TAG, " -> returned " + result); return playgrounds; } }