Permalink
Browse files

Se agrega documentación, se mejora manejo de excepciones en la conexión.

  • Loading branch information...
1 parent 6d58fc2 commit 9988dc75f2f178686e3408adda8ed9a3b5f35eac @sanrodari committed Sep 25, 2012
@@ -6,14 +6,24 @@
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="15" />
- <uses-permission android:name="android.permission.INTERNET"/>
- <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
+
+ <uses-permission android:name="android.permission.INTERNET" />
+ <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
+ android:name=".HotelList"
+ android:label="@string/title_activity_hotel_list" >
+ <intent-filter>
+ <action android:name="android.intent.action.MAIN" />
+
+ <category android:name="android.intent.category.LAUNCHER" />
+ </intent-filter>
+ </activity>
+ <activity
android:name=".MainActivity"
android:label="@string/title_activity_main" >
<intent-filter>
@@ -22,6 +32,15 @@
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
+ <activity
+ android:name=".NewHotel"
+ android:label="@string/title_activity_new_hotel" >
+ <intent-filter>
+ <action android:name="android.intent.action.MAIN" />
+
+ <category android:name="android.intent.category.LAUNCHER" />
+ </intent-filter>
+ </activity>
</application>
</manifest>
Binary file not shown.
View
Binary file not shown.
View
Binary file not shown.
@@ -13,14 +13,27 @@
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
+import org.apache.http.params.BasicHttpParams;
+import org.apache.http.params.HttpConnectionParams;
+import org.apache.http.params.HttpParams;
import android.content.Context;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.util.Log;
+/**
+ * Clase para realizar las conexiones por medio del Apache HTTP Client.
+ * @author sanrodari
+ */
public class Connector {
-
+
+ /**
+ * Verifica la disponibilidad de acceso a Internet del dispositivo.
+ *
+ * @param context Contexto de la aplicación.
+ * @return true de haber disponibilidad.
+ */
public boolean checkConnectivity(Context context) {
ConnectivityManager connMgr = (ConnectivityManager)
context.getSystemService(Context.CONNECTIVITY_SERVICE);
@@ -29,19 +42,40 @@ public boolean checkConnectivity(Context context) {
return networkInfo != null && networkInfo.isConnected();
}
+ /**
+ * Realiza una petición GET a una URL determinada.
+ *
+ * @param url URL a la que se desea realizar la petición.
+ * @return Cadena con la respuesta del servidor, si ocurre una excepción se retorna null.
+ */
public String doGet(final String url) {
try {
- HttpClient httpclient = new DefaultHttpClient();
+ HttpParams httpParameters = new BasicHttpParams();
+ // Se ponen 3 segundos de timeout.
+ HttpConnectionParams.setConnectionTimeout(httpParameters, 3000);
+
+ HttpClient httpclient = new DefaultHttpClient(httpParameters);
HttpResponse response = httpclient.execute(new HttpGet(url));
return convertHttpResponseToString(response);
} catch (Exception e) {
- Log.e(Constants.TAG, "No se ha podido realizar la conexi—n.");
- throw new IllegalStateException("No se ha podido realizar la conexi—n.", e);
+ Log.e(Constants.TAG, "No se ha podido realizar la conexión.");
+ return null;
}
}
+ /**
+ * Realiza una petición POST a una URL determinada.
+ *
+ * @param url URL a la que se desea realizar la petición.
+ * @param nameValuePairs Parámetros de la petición POST.
+ * @return Cadena con la respuesta del servidor, si ocurrió una excepción se retorna null.
+ */
public String doPost(String url, List<NameValuePair> nameValuePairs) {
- HttpClient httpclient = new DefaultHttpClient();
+ HttpParams httpParameters = new BasicHttpParams();
+ // Se ponen 3 segundos de timeout.
+ HttpConnectionParams.setConnectionTimeout(httpParameters, 3000);
+
+ HttpClient httpclient = new DefaultHttpClient(httpParameters);
HttpPost httpPost = new HttpPost(url);
try {
@@ -50,8 +84,8 @@ public String doPost(String url, List<NameValuePair> nameValuePairs) {
HttpResponse response = httpclient.execute(httpPost);
return convertHttpResponseToString(response);
} catch (Exception e) {
- Log.e(Constants.TAG, "No se ha podido realizar la conexi—n.");
- throw new IllegalStateException("No se ha podido realizar la conexi—n.", e);
+ Log.e(Constants.TAG, "No se ha podido realizar la conexión.");
+ return null;
}
}
@@ -70,9 +104,8 @@ private String convertHttpResponseToString(HttpResponse response) {
throw new IOException(statusLine.getReasonPhrase());
}
} catch (Exception e) {
- Log.e(Constants.TAG, "No se ha podido realizar la conexi—n.");
- throw new IllegalStateException("No se ha podido realizar la conexi—n.", e);
+ Log.e(Constants.TAG, "No se ha podido realizar la conexión.");
+ return null;
}
}
-
}
@@ -2,6 +2,6 @@
public interface Constants {
- String TAG = "ConnectionExaple";
+ String TAG = "ConnectionExample";
}
@@ -1,5 +1,10 @@
package com.example.connectionexample;
+/**
+ * Para representar un hotel.
+ *
+ * @author sanrodari
+ */
public class Hotel {
private long id;
@@ -20,9 +20,21 @@
import android.widget.TextView;
import android.widget.Toast;
+/**
+ * Actividad que tiene la lista de hoteles recuperados.
+ *
+ * @author sanrodari
+ */
public class HotelList extends Activity {
+ /**
+ * Widget para mostrar la lista de hoteles.
+ */
private ListView hotelList;
+
+ /**
+ * Objeto que nos permite hacer las conexiones.
+ */
private Connector connector = new Connector();
@Override
@@ -32,7 +44,10 @@ public void onCreate(Bundle savedInstanceState) {
hotelList = (ListView) findViewById(R.id.hotelList);
}
-
+
+ /**
+ * Se realiza la carga de hoteles por medio de la tarea QueryHotels.
+ */
@Override
protected void onStart() {
super.onStart();
@@ -48,18 +63,35 @@ protected void onStart() {
}
}
+ /**
+ * Se navega a la actividad para crear nuevos hoteles.
+ * @param view
+ */
public void newHotelClick(View view) {
Intent intent = new Intent(this, NewHotel.class);
startActivity(intent);
}
+ /**
+ * Tarea que realiza la consulta de los hoteles.
+ *
+ * @author sanrodari
+ */
private class QueryHotelsTask extends AsyncTask<Void, Void, String[]> {
+
+ /**
+ * Se hace la petición al WS.
+ */
@Override
protected String[] doInBackground(Void... voids) {
try {
List<Hotel> recoveryHotels = new ArrayList<Hotel>();
String hotelsJsonString = connector.doGet("http://androidexample.phpfogapp.com/index.php?/hotels/all");
+ if(hotelsJsonString == null) {
+ return new String[]{ "Error al tratar de conectar con el servidor." };
+ }
+
JSONArray hotelsArray = new JSONArray(hotelsJsonString);
for (int i = 0; i < hotelsArray.length(); i++) {
@@ -90,14 +122,17 @@ public void newHotelClick(View view) {
} catch (JSONException e) {
e.printStackTrace();
- Log.e("ConnectionExample", "Error al interpertrar la respuesta del servidor.");
+ Log.e("ConnectionExample", "Error al interpretrar la respuesta del servidor.");
Toast.makeText(HotelList.this,
"Error al interpertrar la respuesta del servidor.",
Toast.LENGTH_LONG).show();
return new String[]{"Error al interpertrar la respuesta del servidor."};
}
}
-
+
+ /**
+ * Se pone la lista con la información.
+ */
@Override
protected void onPostExecute(final String[] result) {
hotelList.setAdapter(new BaseAdapter() {
@@ -14,9 +14,18 @@
import android.widget.EditText;
import android.widget.Toast;
+/**
+ * Actividad que ilustra el uso básico de peticiones HTTP a servicios Web.
+ *
+ * @author sanrodari
+ */
public class MainActivity extends Activity {
+ /**
+ * Objeto que nos permite hacer las conexiones.
+ */
private Connector connector = new Connector();
+
private EditText editText;
@Override
@@ -28,29 +37,29 @@ public void onCreate(Bundle savedInstanceState) {
}
public void connectToService(View view) {
- // Tratar de acceder a la informaci�n.
+ // Tratar de acceder a la información.
if (connector.checkConnectivity(this)) {
new ConnectTask().execute(
"http://androidexample.phpfogapp.com/index.php?/welcome/hello", "GET");
}
// Mostrar el error de no haber conectividad.
else {
Toast.makeText(MainActivity.this,
- "No hay conectividad, no se ha podido cargar la informaci�n.",
+ "No hay conectividad, no se ha podido cargar la información.",
Toast.LENGTH_LONG).show();
}
}
public void connectToServicePost(View view) {
- // Tratar de acceder a la informaci�n.
+ // Tratar de acceder a la información.
if (connector.checkConnectivity(this)) {
new ConnectTask().execute(
"http://androidexample.phpfogapp.com/index.php?/welcome/echoPostParams", "POST");
}
// Mostrar el error de no haber conectividad.
else {
Toast.makeText(MainActivity.this,
- "No hay conectividad, no se ha podido cargar la informaci�n.",
+ "No hay conectividad, no se ha podido cargar la información.",
Toast.LENGTH_LONG).show();
}
}
@@ -63,34 +72,37 @@ protected String doInBackground(String... params) {
String method = params[1];
String result;
- // GET
- if(method.equalsIgnoreCase("GET")) {
+ // POST
+ if(method.equalsIgnoreCase("POST")) {
result = new Connector().doGet(url);
}
- // POST
- else if(method.equalsIgnoreCase("POST")) {
+ // Por defecto GET
+ else {
List<NameValuePair> postParams = new ArrayList<NameValuePair>();
// Si ha sido ingresado algo en el campo de texto entonces
- // se manda como par�metro.
+ // se manda como parámetro.
String enteredText = editText.getText().toString();
if(!TextUtils.isEmpty(enteredText)) {
postParams.add(new BasicNameValuePair("sendParam", enteredText));
}
result = new Connector().doPost(url, postParams);
}
- // Por defecto GET
- else {
- result = new Connector().doGet(url);
- }
+
return result;
}
@Override
protected void onPostExecute(String result) {
- Toast.makeText(MainActivity.this, "Información recuperada: [" + result + "]",
- Toast.LENGTH_LONG).show();
+ if(result != null) {
+ Toast.makeText(MainActivity.this, "Información recuperada: [" + result + "]",
+ Toast.LENGTH_LONG).show();
+ }
+ else {
+ Toast.makeText(MainActivity.this, "Error al tratar de conectar con el servidor.",
+ Toast.LENGTH_LONG).show();
+ }
}
}
Oops, something went wrong.

0 comments on commit 9988dc7

Please sign in to comment.