Haciendo peticiones web desde Android II

Hoy continuamos la serie dedicada al uso de la librería Volley en Android, realizando una petición http a un archivo php. Nos fuimos.

Creamos un nuevo proyecto en Android Studio, le ponemos el nombre que queramos.

Escogemos el Minumun SDK que vamos a utilizar (hagamos un alto aquí. Yo utilizo un SDK que baje del servidor de villa clara, y tiene soporte para la API 22 y 23, correspondiente a Android Lollipop y Marshmallow respectivamente, si tienen uno más completo pues felicidades, pero variaremos algo luego para que nuestra app corra en teléfonos con una versión más baja de Android).

Luego escogemos una plantilla para facilitar las cosas. Yo utilicé Empty Activity, pero pueden escoger el que deseen

y para finalizar le damos un nombre a nuestra activity, yo lo deje con MainActivity para andar rápido, y finalizamos.

Lo primero seria modificar nuestro Manifest, agregándole el permiso para que nuestra app salga a Internet. Lo hacemos así:

<uses-permission android:name=“android.permission.INTERNET”></uses-permission>

Les dejo una captura, por que por lo menos yo no sabía la primera vez que programe en Android donde diablos poner eso.

Y ahora nos toca ya programar en serio con Android. Vallemos al visual y escribamos el siguiente código:

<?xml version=“1.0” encoding=“utf-8”?>
<RelativeLayout xmlns:android=“http://schemas.android.com/apk/res/android”
xmlns:tools=“http://schemas.android.com/tools”
android:layout_width=“match_parent”
android:layout_height=“match_parent”
android:paddingBottom=“@dimen/activity_vertical_margin”
android:paddingLeft=“@dimen/activity_horizontal_margin”
android:paddingRight=“@dimen/activity_horizontal_margin”
android:paddingTop=“@dimen/activity_vertical_margin”
tools:context=“com.example.delioveliz.volley_send_and_response.MainActivity”
android:background=“#ffffff”>

<LinearLayout
android:orientation=“vertical”
android:layout_width=“match_parent”
android:layout_height=“match_parent”
android:layout_centerHorizontal=“true”>

<ImageView
android:layout_width=“match_parent”
android:layout_height=“200dp”
android:id=“@+id/imageView”
android:src=“@drawable/gtr”
android:scaleType=“fitXY”
android:adjustViewBounds=“false”
android:layout_gravity=“center_horizontal” />

<TextView
android:layout_width=“wrap_content”
android:layout_height=“wrap_content”
android:text=“Usuario”
android:paddingTop=“20dp”/>

<EditText
android:layout_width=“match_parent”
android:layout_height=“wrap_content”
android:id=“@+id/user_id”/>

<TextView
android:layout_width=“wrap_content”
android:layout_height=“wrap_content”
android:text=“Contraseña”
android:paddingTop=“20dp”/>

<EditText
android:layout_width=“match_parent”
android:layout_height=“wrap_content”
android:id=“@+id/pass_id”/>

<Button
android:layout_width=“wrap_content”
android:layout_height=“wrap_content”
android:text=“Login”
android:id=“@+id/button”
android:layout_gravity=“center_horizontal” />
</LinearLayout>
</RelativeLayout>

 

Tranquilos, nada del otro mundo, XML y propiedades, ahora explico. Pero eso genera esto:

El XML, nada, un LinearLayout que tomará toda la pantalla del dispositivo, un ImageView que tendrá como src el logo de la guitarra, dos TextView con los valores Usuario y Contraseña y un par de EditText, yap, simple.

Bien, ahora toca importar la libreria Volley, que dejo al final del post. Olvídense de Android Studio y vamos para el Windows, o Linux, o lo que sea, y entramos a la carpeta donde está el proyecto. Nos vamos a \app\libs\ y dejamos una copia de la libreria Volley. Ahora nos vamos para AS otra vez y presionamos F4, nos saldrá esto:

Vamos a la pestaña Dependencies y verán a la derecha un signo + en verde, le dan clic y escogemos la opción 2 que nos dice File Dependency. Nos debe salir por defecto la carpeta libs donde metimos la libreria Volley, la marcamos y esperamos que el Graddle de AS haga su trabajo. Y nos fuimos para la implementación Java.

En la clase principal, (en mi caso MainActivity) escribimos el siguiente código:  String u, p;
TextView user, pass;
Button button;
String server_url = “http://192.168.10.1/services/send_and_response.php”;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

user = (TextView) findViewById(R.id.user_id);
pass = (TextView) findViewById(R.id.pass_id);
button = (Button) findViewById(R.id.button);
builder = new AlertDialog.Builder(MainActivity.this);

button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {

u = user.getText().toString();
p = pass.getText().toString();

final RequestQueue requestQueue = Volley.newRequestQueue(MainActivity.this);
StringRequest stringRequest = new StringRequest(Request.Method.POST, server_url,

new Response.Listener<String>() {
@Override
public void onResponse(String s) {

try {
JSONArray jsonArray = new JSONArray(s);
JSONObject jsonObject = jsonArray.getJSONObject(0);

String nombre = jsonObject.getString(“nombre”);

Toast.makeText(MainActivity.this, nombre, Toast.LENGTH_SHORT).show();

} catch (JSONException e) {
e.printStackTrace();
}

}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError volleyError) {
Toast.makeText(MainActivity.this, “Algo a pasado con la conexión…”, Toast.LENGTH_SHORT).show();
}
}){

@Override
protected Map<String, String> getParams() throws AuthFailureError {

Map<String, String> params = new HashMap<String, String>();
params.put(“user”, u);
params.put(“pass”, p);

return params;
}
};
requestQueue.add(stringRequest);
}
});  Lo explicamos por partes

String u, p;
TextView user, pass;
Button button;
String server_url = “http://192.168.10.1/services/send_and_response.php”;

Creamos las variables que vamos a utilizar, variables de tipo String, de tipo TextView y Button.

user = (TextView) findViewById(R.id.user_id);
pass = (TextView) findViewById(R.id.pass_id);
button = (Button) findViewById(R.id.button);

Aquí asignamos a las variables antes declaradas que van a capturar los valores de los TextView y el Botón

u = user.getText().toString();

p = pass.getText().toString();

 

Asignamos los valores de user y pass a u y p para no tener que declararlas final. Lo siguiente es propio de la librería Volley, para no entrar en detalles solo diré que necesitamos capturar el response y el error si lo hubiese:

 

try {
JSONArray jsonArray = new JSONArray(s);
JSONObject jsonObject = jsonArray.getJSONObject(0);

String user = jsonObject.getString(“user”);

Toast.makeText(MainActivity.this, user, Toast.LENGTH_SHORT).show();

} catch (JSONException e) {
e.printStackTrace();
}

 

Capturamos el String que viene del servidor con el índice “user” y lo asignamos a una variable. Ya con eso de este lado, hacemos lo que queramos, nos puede servir para un login, para mostrar texto en un Label, lo que sea. En este caso lo muestro en un Toast nada más, para saber que funciona. Todo va encerrado en un try catch, así podemos capturar algún error de ejecución.

Lo último importante es enviar los parámetros que pasemos por las cajas de texto

 

Map<String, String> params = new HashMap<String, String>();
params.put(“user”, u);
params.put(“pass”, p);

return params;

 

Y nada más. Esto a la larga lo haremos copy and paste y solo variaremos los parámetros a enviar, y los índices a recolectar.

Nada más. En la próxima entrada le daremos la compatibilidad con versiones inferiores a Lollipop y MM. Y nos animamos y hacemos un login completo. No te la pierdas.

Share
Soy Ingeniero en Ciencias Informáticas, me encanta programar sobre todo en C# y Android

5 thoughts on “Haciendo peticiones web desde Android II

  1. Magnífico sitio!
    ¿Puedo pedirles que publiquen algún ejemplo sencillo de cómo sería lo elemental para poder leer desde Android registros de una base SQL, por ejemplo? ¿Algo para tomarlo de base para empezar a estudiar?

    Agradecido de antemano

    Alberto García Fumero

    alberto@ettpartagas.co.cu

    1. pero tu dices leer datos de una base de datos SQL con android usando SOAP??? o te refieres a una base de datos local dentro del telefono??

    1. En Android el lenguaje de bases de datos que se utiliza es SQLite que es un motor de bases de datos muy popular en la actualidad por ofrecer características tan interesantes como su pequeño tamaño, no necesitar servidor, precisar poca configuración, ser transaccional, y por supuesto ser de código libre. Android trae integrado de serie todas las herramientas necesarias para la creación y gestión de bases de datos SQLite y las más utilizada es la clase SQLiteOpenHelper así que lo primero que tenemos que hacer es crear una clase que extienda de SQLiteOpenHelper ejemplo:
      public class UsuariosSQLiteHelper extends SQLiteOpenHelper {
      //Sentencia SQL para crear la tabla de Usuarios
      String sqlCreate = “CREATE TABLE Usuarios (codigo INTEGER, nombre TEXT)”;

      //constructor de la clase
      public UsuariosSQLiteHelper(Context contexto, String nombre,CursorFactory factory, int version) {
      super(contexto, nombre, factory, version);
      }

      @Override
      public void onCreate(SQLiteDatabase db) {
      //Se ejecuta la sentencia SQL de creación de la tabla
      db.execSQL(sqlCreate);
      }
      }

      Una vez creada esta clase la podemos utilizar desde cualquier activity por ejemplo:
      public class AndroidBaseDatos extends Activity
      {
      @Override
      public void onCreate(Bundle savedInstanceState)
      {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.main);
      //Abrimos la base de datos ‘DBUsuarios’ en modo escritura
      UsuariosSQLiteHelper usdbh =new UsuariosSQLiteHelper(this, “DBUsuarios”, null, 1);
      SQLiteDatabase db = usdbh.getWritableDatabase();
      //comprobamos si está abierta la base de datos
      if(db != null)
      {
      //aquí escribimos cualquier consulta SQLite
      //Cerramos la base de datos
      db.close();
      }
      }
      }

      Para realizar consultas debemos hacerlo de la siguiente manera:
      Insertar:
      db.execSQL(“INSERT INTO Usuarios VALUES(‘Nombre’)”);
      Eliminar:
      db.execSQL(“DELETE FROM Usuarios WHERE nombre=’Lolo’ ”);
      Actualizar:
      db.execSQL(“UPDATE Usuarios SET nombre=’Lolo’ WHERE código=’5’ ”);

      para acceder a los valores de la base de datos lo hacemos utilizando un objeto de tipo Cursor que será el encargado de recorrer las tablas de la base de datos y devolvernos los valores que queramos consultar:
      Cursor c = db.rawQuery(“SELECT nombre FROM Usuarios”,null);
      //comprobar que el cursor está en la primera posición de la tabla
      if (cursor.moveToFirst()) {
      //comprobamos que no ha llegado a la última posición de la tabla
      while (cursor.moveToLast() == false) {
      //moveToNext() nos ayuda a desplazarnos dentro de la tabla
      cursor.moveToNext();
      }
      //ejemplo de cómo devolver los valores que buscamos
      lectura_anterior.setText(cursor.getString(0));
      } else
      lectura_anterior.setText(“0”);

      en fin, son las consultas SQL de toda la vida y pueden ser tan complejas como queramos.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *