lunes, 11 de noviembre de 2013

Desarrollo Android.- Action Bar Sherlock

Hola a todos, en esta entrada vamos a aprender a importar ésta librería a nuestro proyecto Android y utilizar sus bondades. En primer lugar necesitamos descargar el .zip de su página oficial actionbarsherlock.com, lo descomprimimos y buscamos el directorio que pone actionbarsherlock, dicho directorio es el que tenemos que abrir como proyecto en nuestro IDE, yo utilizo Eclipse, sería algo como esto: File->New->Other->Android Project from Existing Code, una vez hecho esto y con nuestro proyecto en el área de trabajo hacemos botón derecho sobre él, Propiedades->Android->Marcamos "Is Library", indicando que dicho proyecto es una librería que importaremos al proyecto de nuestra aplicación.

Para importar la librería a nuestra aplicación seguimos los siguientes pasos:

  1. Botón derecho sobre nuestro proyecto.
  2. Propiedades
  3. Donde antes marcamos el checkbox Is Library, ahora en vez de eso haremos click en Añadir
  4. Seleccionamos actionbarsherlock

Ahora ya podemos hacer uso de todos sus clases y métodos, para añadir el action bar a cualquiera de nuestras Activities, necesitamos en primer escribir dentro de nuestra clase la siguiente línea:

MainActivity - copia.java
 1 public class MainActivity extends SherlockActivity

Como comprobaréis, ahora no extendemos la clase Activity, básicamente la funcionalidad es la misma pero con la barra de acciones como añadido.

El siguiente paso es añadir botones a la barra de acciones y capturar sus eventos, para ello sobrescribiremos uno de los métodos que nos proporciona esta librería, un ejemplo:

MainActivity - copia.java
 1 @Override
 2  public boolean onCreateOptionsMenu(Menu menu) {
 3  
 4   menu.add(Menu.NONE, R.id.tabMode, Menu.NONE, "Save")
 5             .setIcon(R.drawable.ic_compose)
 6             .setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
 7 
 8   menu.add(Menu.NONE, R.id.abs__search_plate, Menu.NONE, "Refresh")
 9             .setIcon(R.drawable.ic_refresh)
10             .setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
11 
12         return true;
13  }

Con este método hemos agregado 2 botones a la barra de acciones, uno se llama Save y tendrá la imagen R.drawable.ic_compose, y el otro Refresh.

Ahora para capturar cuando éstos son pulsados, necesitamos sobrescribir otro método y mediante un switch guiado por los identificadores de cada botón que pusimos en el ejemplo anterior es como identificamos cual fue pulsado:

MainActivity - copia.java
 1 @Override
 2  public boolean onOptionsItemSelected(MenuItem item) {
 3      
 4      switch (item.getItemId()) {
 5          case R.id.tabMode: 
 6                     
 7          case R.id.abs__search_plate:
 8           
 9          default:
10              return super.onOptionsItemSelected(item);
11      }
12  }

Y esto es todo por hoy, ¡espero que os sirva de gran ayuda!

miércoles, 16 de octubre de 2013

Desarrollo Android.- Agregar filas dinámicamente a un TableLayout

Hola a todos, quizá alguna vez necesitaseis crear una lista donde en cada fila sea necesario incluir botones u otros elementos propios de la interfaz Android, pues hoy os voy a dar una pequeña receta que a mi personalmente me ha sacado de un apuro y además funciona a la perfección. Por supuesto podéis añadir vuestros propios elementos y personalizarla como queráis.

En primer lugar debemos crear en la carpeta /res/layout de nuestro proyecto Android, un fichero XML que llamaremos fila.xml que debe quedar así:

fila_producto.xml
 1 <?xml version="1.0" encoding="utf-8"?>
 2 <TableRow  android:id="@+id/tableRow1"
 3            android:layout_width="wrap_content"
 4            android:layout_height="wrap_content"
 5            android:gravity="center"
 6            xmlns:android="http://schemas.android.com/apk/res/android">
 7 
 8        <Button
 9            android:id="@+id/button1"
10            style="?android:attr/buttonStyleSmall"
11            android:layout_width="wrap_content"
12            android:layout_height="wrap_content"
13            android:layout_marginRight="20dp"
14            android:text="Botón" />
15 
16                 <TextView
17                     android:id="@+id/textView1"
18                     android:layout_width="wrap_content"
19                     android:layout_height="wrap_content"
20                     android:text="Descripción"
21                     android:layout_marginRight="20dp"
22                     android:textAppearance="?android:attr/textAppearanceMedium" />
23 
24 </TableRow>

Con esto hemos especificado el contenido que tendrá cada una de nuestra filas de la lista, en nuestro caso un botón y un TextView, pero esto sólo es el contenido de una fila, tenemos que crear un layout donde se podrán colocar cada una de estas filas, para ello también dentro del directorio res/layout crearemos un fichero XML llamado activity_lista.xml que será el que se muestre en nuestra aplicación y básicamente tendrá como contenido un TableLayout donde ubicarse las filas que definimos antes (como veréis está dentdo de un ScrollView en caso de que nuestra lista sea muy grande), aquí el código:

activity_productos.xml
 1 <?xml version="1.0" encoding="utf-8"?>
 2 
 3 
 4     <ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
 5         android:id="@+id/scrollView_productos"
 6         android:layout_width="fill_parent"
 7         android:layout_height="fill_parent" >
 8 
 9         <TableLayout
10             android:id="@+id/tableLayout"
11             android:layout_width="match_parent"
12             android:layout_height="wrap_content" >
13 
14            
15         </TableLayout>
16         
17         
18     </ScrollView>
19 

Y ahora lo más importante, ¿cómo hacemos que la fila que definimos en el archivo fila.xml se replique y se coloque en el archivo que acabamos de crear, activity_lista.xml?, para ello necesitamos una clase Activity_fila.java que extienda Activity para que realice ese trabajo, básicamente nuestra clase tendrá un bucle el cual irá replicando la fila y la irá colocando en nuestra activity_fila.xml, además cada fila que colocamos podemos modificarla y añadir nuevos valores al TextView con su función setText() o incluso añadir mas widgets desde el código, os dejo un ejemplo:

Productos.java
 1 import android.app.Activity;
 2 import android.os.Bundle;
 3 import android.view.LayoutInflater;
 4 import android.widget.TableLayout;
 5 import android.widget.TableRow;
 6 import android.widget.TextView;
 7 
 8 public class Productos extends Activity{
 9 
10  
11  @Override
12  protected void onCreate(Bundle savedInstanceState) {
13   
14   super.onCreate(savedInstanceState);
15   setContentView(R.layout.activity_lista);
16   int i = 0;
17   
18   TableLayout table = (TableLayout)this.findViewById(R.id.tableLayout);
19   for(i = 0; i<20 ; i++)
20   {
21       
22       TableRow row = (TableRow)LayoutInflater.from(this).inflate(R.layout.fila, null);
23    
24       ((TextView)row.findViewById(R.id.textView1)).setText("Elemento "+i);
25       table.addView(row);
26   }
27   table.requestLayout();     
28   
29   
30  }
31 
32  
33  
34  
35 }

Eso es todo por hoy, bonna nit!

miércoles, 25 de septiembre de 2013

PHP.- Recoger variables POST y conectar con Base de Datos MySQL.

¡Hola a todos!, con esto dejamos completo mi anterior entrada , antes de comenzar recordaos que los archivos PHP se ejecutan en el lado del servidor, no en el cliente.

Como sabréis con el método POST de HTTP podemos enviar variables en la misma URL, un ejemplo de ello es una busqueda en Google, cuando damos a buscar lo que se envía sería algo parecido a esto: www.google.es/search.php?words=busqueda, como podemos comprobar, en realidad accedemos al archivo search.php dentro del servidor de www.google.es (esto es un ejemplo, no tiene por qué ser necesariamente así, pero en esencia es lo mismo) y a ese archivo le pasamos la variable words=busqueda con formato "variable=valor".

Pues bien, ese supuesto archivo search.php debe recoger la variable words y hacer algo con ella, después conectarse a la Base de Datos, ejecutar la consulta y mostrarnos el resultado, entremos en el código:

connection - copia.php
 1 <?php
 2 //Recogida de variables POST
 3 $val = $_POST['words'];
 4 $resultado = "";
 5 
 6 //Conexión a la Base de Datos MySQL
 7 $conexion = mysql_connect("localhost","usuario",
 8 "contraseña"); 
 9 mysql_select_db("BaseDeDatos_a_Seleccionar",$conexion);
10 
11 //Ejecución de la consulta
12 $execute = mysql_query("SELECT * FROM tu_tabla_aquí");
13 
14 //Busqueda de los registros devueltos por la consulta
15 if($row = mysql_fetch_array($execute)){
16    //Guardo los campos de cada registro en la variable, en 
17    este caso solo tengo un campo llamado DNI
18    $resultado = $row["DNI"];
19    //$otro = $row["Otro_campo"]
20 }
21 
22 //Se lo devuelvo al cliente que ejecutó el archivo PHP
23 echo $resultado;
24 ?> 

Con esto ya hemos establecido conexión con nuestra base de datos, solo queda recoger los datos desde el cliente, en el caso de Android mira aquí, si tenéis cualquier duda comentad. ¡Un Saludo!

lunes, 23 de septiembre de 2013

Desarrollo Android.- Conectar Aplicación con MySQL

Sé que somos muchos los que actualmente desarrollamos aplicaciones para Android, por eso hoy os traigo el código que he utilizado para conectar mi aplicación con una Base de Datos MySQL de forma remota a través del protocolo HTTP:

MainActivity.java
public class MainActivity extends Activity {

    Button buttonEntrar;
    TextView textResult;
    EditText et;
 
    HttpPost httppost;
    StringBuffer buffer;
    HttpResponse response;
    HttpClient httpclient;
    List<NameValuePair> nameValuePairs;
 
 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);
  
  et = (EditText) findViewById(R.id.editText_user);
  buttonEntrar = (Button) findViewById(R.id.button_send);
  textResult = (TextView) findViewById(R.id.textView_result);
  buttonEntrar.setOnClickListener(new View.OnClickListener() 
     {
       public void onClick(View v) 
       {
        final ProgressDialog p = new ProgressDialog(v.getContext()).show(v.getContext(),"Waiting for Server", "Accessing Server");
              Thread thread = new Thread()
              {
                  @Override
                  public void run() {
                        
                           try{
                           httpclient=new DefaultHttpClient();
                           httppost= new HttpPost("http://pidb.no-ip.org/connection.php"); // make sure the url is correct.
                           //add your data
                           nameValuePairs = new ArrayList<NameValuePair>(1);
                           // Always use the same variable name for posting i.e the android side variable name and php side variable name should be similar,
                           nameValuePairs.add(new BasicNameValuePair("Edittext_value",et.getText().toString().trim()));  // $Edittext_value = $_POST['Edittext_value'];
                           httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
                           //Execute <span id="IL_AD6" class="IL_AD">HTTP Post</span> Request
                           response=httpclient.execute(httppost);
                            
                           ResponseHandler<String> responseHandler = new BasicResponseHandler();
                           final String response = httpclient.execute(httppost, responseHandler);
                           System.out.println("Response : " + response);
                           runOnUiThread(new Runnable() {
                                  public void run() {
                                      p.dismiss();
                                       textResult.setText("Response from PHP : " + response);
                                  }
                              });
                           
                           }catch(Exception e){}
                  }
              };

              thread.start();
       }
     });   
  
 }

}

Esta Activity se conectará al servidor que aloja base de datos y se dirigirá al archivo connection.php pasándole con el método POST de http la sentencia SQL que se desee ejecutar en la variable a la que he llamado SENTENCIA, por php recogeré esa variable y en el lado del servidor se ejecutará dicha sentencia, realmente la aplicación no accede directamente a la Base de Datos, sino que es nuestro servidor Apache quien lo hará. Recordad que se puede pasar más de una variable por PHP separándolas con el símbolo &.

Probado y funcionando, para la próxima pondré como recoger variables POST con PHP. ¡Un saludo!

domingo, 22 de septiembre de 2013

Bienvenidos a Ingeniar y Aprender

Hola y bienvenidos a mi blog, soy estudiante de Ingeniería Informática actualmente en 3er Curso, trataré de incluir aquí trabajos y proyectos de interés, mi mayor ambición es que con vuestra ayuda pueda seguir avanzando, y que mi experiencia, aunque poca, espero que os sirva.

Un saludo a todos aquellos que no se cansan de aprender y ayudan a la comunidad para seguir avanzando.