Cómo consumir un servicio REST en una aplicación Android
Los servicios REST son ideales para proporcionar contenido a dispositivos pequeños como smartphones y tablets. De hecho, si has interactuado con alguna API basada en la nube en los últimos años, es muy probable que esa API se haya expuesto a través de una interfaz REST. Existen numerosos documentos en la web que explican qué constituye un servicio REST y cómo implementarlo. También hay varios tutoriales que explican cómo consumir servicios REST desde un cliente. Sin embargo, una solicitud común que veo en los foros de Android es de ejemplos de consumidores REST específicos de Android basados en Java.
Recientemente, mi hijo y yo lanzamos una actualización para nuestro juego, la cual incluía una tabla de clasificación en línea. El código del servidor es bastante simple: lleva el registro de los cinco mejores puntajes en cada uno de los 40 niveles. Debido a su ligereza y relativa facilidad de implementación, expuse la tabla de clasificación en mi aplicación (y en cualquier persona interesada) a través de una llamada HTTP GET RESTful. Por ejemplo, para ver los cinco mejores jugadores en el nivel #1, simplemente abre esta URL en cualquier navegador: http://www.cheesejedi.com/rest_services/get_big_cheese?level=1.
Figura A
Llamar a un punto de enlace REST desde una aplicación Android requiere enviar una solicitud HTTP al hilo de fondo y luego analizar los resultados en el hilo de la interfaz de usuario. No es muy difícil una vez que lo ves explicado detalladamente, pero a veces puede ser un poco complicado empezar.
Este tutorial incluye una versión simplificada del código que realmente se utilizó en mi aplicación en producción. Esperemos que te resulte útil para empezar con tus propios consumidores REST en Android. Puedes seguir el tutorial paso a paso, o descargar el proyecto completo para importarlo en Eclipse.
Paso 1: Crear un nuevo proyecto de Android en Eclipse
Crea un nuevo proyecto de Android en Eclipse. Elige un Target SDK 1.6 o superior, y asegúrate de renombrar la actividad de inicio como Main.java.
Cómo prevenir huellas y manchas en las pantallas de las tabletsPaso 2: Crear un recurso main.xml en la carpeta /res/layout
main.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="Http GET Demo"/> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:text="GET" android:id="@+id/my_button"/> <EditText android:layout_margin="20dip" android:layout_width="fill_parent" android:layout_height="wrap_content" android:minLines="15" android:maxLines="15" android:textSize="12sp" android:editable="false" android:id="@+id/my_edit"/> </LinearLayout>
Paso 3: Agregar el permiso de acceso a internet en el archivo AndroidManifest.xml
AndroidManifest.xml <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.authorwjf.http_get" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="4" /> <uses-permission android:name="android.permission.INTERNET"/> <application android:icon="@drawable/ic_launcher" android:label="@string/app_name" > <activity android:name=".Main" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest>
Paso 4: Implementar el código en Main.java
Main.java package com.authorwjf.http_get; import java.io.IOException; import java.io.InputStream; 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.apache.http.protocol.BasicHttpContext; import org.apache.http.protocol.HttpContext; import android.app.Activity; import android.os.AsyncTask; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.EditText; public class Main extends Activity implements OnClickListener { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); findViewById(R.id.my_button).setOnClickListener(this); } @Override public void onClick(View arg0) { Button b = (Button)findViewById(R.id.my_button); b.setClickable(false); new LongRunningGetIO().execute(); } }
Paso 5: Implementar la clase LongRunningGetIO en Main.java
Main.java private class LongRunningGetIO extends AsyncTask <Void, Void, String> { protected String getASCIIContentFromEntity(HttpEntity entity) throws IllegalStateException, IOException { InputStream in = entity.getContent(); StringBuffer out = new StringBuffer(); int n = 1; while (n>0) { byte[] b = new byte[4096]; n = in.read(b); if (n>0) out.append(new String(b, 0, n)); } return out.toString(); } @Override protected String doInBackground(Void... params) { HttpClient httpClient = new DefaultHttpClient(); HttpContext localContext = new BasicHttpContext(); HttpGet httpGet = new HttpGet("http://www.cheesejedi.com/rest_services/get_big_cheese.php?puzzle=1"); String text = null; try { HttpResponse response = httpClient.execute(httpGet, localContext); HttpEntity entity = response.getEntity(); text = getASCIIContentFromEntity(entity); } catch (Exception e) { return e.getLocalizedMessage(); } return text; } protected void onPostExecute(String results) { if (results!=null) { EditText et = (EditText)findViewById(R.id.my_edit); et.setText(results); } Button b = (Button)findViewById(R.id.my_button); b.setClickable(true); } }
La demostración debería estar lista para probar. Sube el archivo APK a un emulador y presiona el botón. Si tienes una conexión a internet y el servidor no está sobrecargado de solicitudes, deberías obtener una respuesta. La demostración no realiza ninguna manipulación en la cadena de resultados, pero debería ser claro lo fácil que sería incluir los resultados en un arreglo JSON y mostrarlos de manera significativa.
Figura B
¡Felicitaciones! ¡Acabas de consumir un servicio RESTful desde tu dispositivo Android!
En Newsmatic nos especializamos en tecnología de vanguardia, contamos con los artículos mas novedosos sobre Móvil, allí encontraras muchos artículos similares a Cómo consumir un servicio REST en una aplicación Android , tenemos lo ultimo en tecnología 2023.
Artículos Relacionados