Tutorial Programacion Android

17
 http://www.maestrosdelweb.com/editorial/descubriendo- android-con-el-hello-world/ Guía Android: Descubriéndolo con el Hello World Android, el sistema operativo móvil de Google, como sabéis es de código abierto y gratuito  por lo que cualquier persona o empresa pueda cogerlo, modificarlo y usarlo en sus  productos. Esta apertura va a provocar que haya más de 20 móviles con Android a finales de año. Incluso recientemente hemos visto que Acer va a lanzar un netbook con una versión modificada de Android. Por si faltan excusas para aprender también deciros que Ubuntu ha financiado un proyecto que permitirá ejecutar programas de Android en este famoso sistema operativo. Requisitos Android está hecho en Java+XML, siguiendo el patrón MVC (Model-View- Controller). Bájate el SDK El mejor IDE para programar para Android es Eclipse (multiplataforma), pero  puedes usar el que quieras, solo q ue tendrás menos facilidades. En los artículos usaremos Eclipse. Bájate el plugin de Android para Eclipse (ADT). En estas fáciles instrucciones  podrás completar los pasos previos. Creando un nuevo proyecto La mejor forma de conocer un sistema es probándolo asi que vamos a crear el proyecto y  por el camino vamos explicando cómo funciona Android.

Transcript of Tutorial Programacion Android

Page 1: Tutorial Programacion Android

5/8/2018 Tutorial Programacion Android - slidepdf.com

http://slidepdf.com/reader/full/tutorial-programacion-android 1/17

 

http://www.maestrosdelweb.com/editorial/descubriendo-android-con-el-hello-world/

Guía Android: Descubriéndolo con el Hello WorldAndroid, el sistema operativo móvil de Google, como sabéis es de código abierto y gratuito por lo que cualquier persona o empresa pueda cogerlo, modificarlo y usarlo en sus productos. Esta apertura va a provocar que haya más de 20 móviles con Android a finalesde año.

Incluso recientemente hemos visto que Acer va a lanzar un netbook con una versiónmodificada de Android. Por si faltan excusas para aprender también deciros que Ubuntu hafinanciado un proyecto que permitirá ejecutar programas de Android en este famososistema operativo.

Requisitos

• Android está hecho en Java+XML, siguiendo el patrón MVC (Model-View-Controller).

• Bájate el SDK 

• El mejor IDE para programar para Android es Eclipse (multiplataforma), pero puedes usar el que quieras, solo que tendrás menos facilidades. En los artículosusaremos Eclipse.

• Bájate el plugin de Android para Eclipse (ADT).

En estas fáciles instrucciones  podrás completar los pasos previos.

Creando un nuevo proyecto

La mejor forma de conocer un sistema es probándolo asi que vamos a crear el proyecto y por el camino vamos explicando cómo funciona Android.

Page 2: Tutorial Programacion Android

5/8/2018 Tutorial Programacion Android - slidepdf.com

http://slidepdf.com/reader/full/tutorial-programacion-android 2/17

 

Una vez instalado el plugin, creamos el nuevo proyecto de Android (File > New > Project >Android Project). Damos a siguiente:

• Project name: HolaMundo

• Package name: com.example.holamundo

Page 3: Tutorial Programacion Android

5/8/2018 Tutorial Programacion Android - slidepdf.com

http://slidepdf.com/reader/full/tutorial-programacion-android 3/17

 

• Create Activity: HolaMundo

• Application name: Hola Mundo

Aunque he puesto los mismos nombres en los 4 sitios no tiene por qué coincidir, comosabréis. El nombre de la aplicación es lo que veréis en el móvil, las actividades son loscontroladores de Android, el nombre del paquete es algo interno y el proyecto es lo que

veréis en Eclipse. Finalizamos y podremos ver el siguiente árbol de archivos

Voy a explicar la estructura:

• /src – Aquí se encuentran las actividades (controladores recuerdo), clases y unarchivo que se llama R.java. Este archivo no se debe tocar nunca, Android loactualiza automáticamente pero si lo veis os encontraréis con variables y posiciones.

• /Android Library – Eclipse referencia al sdk de Android. No mováis nunca el sdk desitio o si lo hacéis recordad cambiar la dirección

• /assets – Aquí se puede incluir archivos varios (música, pdfs, zips, rars)

• /res/drawable – Todas las imágenes van en este directorio

• /res/layout – Todas las vistas van aquí

• /res/values – En el archivo strings.xml podemos poner variables que luego

sustituiremos en las vistas• AndroidManifest.xml – Este archivo es muy importante porque recoge todas las

actividades y algunas configuraciones del proyecto.

Page 4: Tutorial Programacion Android

5/8/2018 Tutorial Programacion Android - slidepdf.com

http://slidepdf.com/reader/full/tutorial-programacion-android 4/17

 

Antes de seguir vamos a ejecutar el proyecto, y para eso damos a Run As y elegimosAndroid Application. Si instalasteis todo bien saldrá el emulador, cargando iniciando

Android (tarda un poquito). Lo desbloqueamos dando a Menú, y ya puedes ver laaplicación más básica que se hace en todos los lenguajes, nuestro Hola Mundo.

Si quieres puedes investigar los programas que trae el emulador, está bastante bienconseguido; aunque para mi gusto faltan varios detalles como girar el teléfono en posiciónhorizontal. A continuación veremos cómo ha funcionado el programa.

Entendiendo el Hola Mundo

Page 5: Tutorial Programacion Android

5/8/2018 Tutorial Programacion Android - slidepdf.com

http://slidepdf.com/reader/full/tutorial-programacion-android 5/17

 

Gracias al plugin de Android, no hemos programado nada y ya tenemos el programa básico.Pero como hemos visto antes en la estructura, se han creado unos cuantos archivos. Vamosa ir paso a paso por cada uno de ellos.

?0

10203040506070809101112

13141516

// AndroidManifest.xml<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android"

package="com.example.holamundo"android:versionCode="1"android:versionName="1.0.0">

<application android:icon="@drawable/icon"android:label="@string/app_name">

<activity android:name=".HolaMundo"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>

Supongo que estaréis familiarizados con xml, si no, no os preocupéis, es muy fácil deentender. Podemos ver como crea un manifesto con el paquete y la versión de Android.Contiene la aplicación que hemos creado. android:icon="@drawable/icon" coge la

imagen llamada icon.png del directorio /res/drawables y la asigna como icono. Esto es loque véis en el menú de aplicaciones. Lo mismo sucede conandroid:label="@string/app_name", sustituye la variable app_name por su valor en elarchivo:

?123

// res/values/strings.xml<?xml version="1.0" encoding="utf-8"?><resources>

<string name="hello">Hello World, HolaMundo</string>

Page 6: Tutorial Programacion Android

5/8/2018 Tutorial Programacion Android - slidepdf.com

http://slidepdf.com/reader/full/tutorial-programacion-android 6/17

 

456

<string name="app_name">Hola Mundo</string></resources>

Volviendo a AndroidManifest.xml , vemos que dentro de application se encuentra laactividad principal android:name=".HolaMundo", que corresponde con un punto más el

nombre de la clase java en src/com.example.holamundo. El resto son detalles más profundos. Asi que Android ejecuta esa clase, vamos a verla:

?01020304

050607080910

11121314151

6

// src/com.example.holamundo/HolaMundo.javapackage com.example.holamundo;

 import android.app.Activity;import android.os.Bundle;

 public class HolaMundo extends Activity {

/** Called when the activity is first created. */@Overridepublic void onCreate(Bundle savedInstanceState) {// Inicializa la actividadsuper.onCreate(savedInstanceState);

// Asignamos la vistasetContentView(R.layout.main);}

}

Crea una actividad llamada HolaMundo con un único método que sobreescribe al de laclase que extiende. Vemos como setContentView pasa como parámetro R.layout.main querepresenta a /res/layout/main.xml . Pero como dije antes, todo las referencias a archivos yvariables pasan por la clase R.java que Android se encarga de ajustar automáticamente.Veamos la vista

?0 // res/layout/main.xml

Page 7: Tutorial Programacion Android

5/8/2018 Tutorial Programacion Android - slidepdf.com

http://slidepdf.com/reader/full/tutorial-programacion-android 7/17

 

10203040506070809

10111213

<?xml version="1.0" encoding="utf-8"?><LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"

android:orientation="vertical"android:layout_width="fill_parent"android:layout_height="fill_parent">

<TextViewandroid:layout_width="fill_parent"android:layout_height="wrap_content"android:text="@string/hello"/>

</LinearLayout>

Como podéis ver vuelve a ser un xml y es que Google ha elegido usar xml para representar las vistas. LinearLayout es un tipo de layout que muestra los elementos uno debajo de otro.Tiene orientación vertical y ocupa toda la pantalla tanto a lo alto como a lo ancho.

Dentro podemos ver un campo de texto (TextView) cuyo texto se encuentra en el archivo strings.xml visto antes.

Finalizando

Hemos visto paso por paso lo que hace Android para ejecutar un sencillo Hola Mundo. Loimportante es:

• AndroidManifest.xml contiene todas las actividades indicando cuál se ejecuta primero.

• Todas las actividades y clases se encuentran en src. La actividad HolaMundo usa ellayout main.xml 

Todos los layouts están en res/layout . Se programan en xml siguiendo las etiquetasdel SDK de Android.

• En cualquier sitio podemos referenciar a variables del fichero strings.xml. Esto esmuy útil para aplicaciones en varios idiomas.

En el siguiente capítulo conectaremos otra aplicación con la base de datos, y aprenderemosmás como se manejan los modelos y diversas vistas. Si tenéis cualquier sugerencia paramejorar y hacer más útiles estos tutoriales, no tenéis más que hacerla en los comentarios.

Page 8: Tutorial Programacion Android

5/8/2018 Tutorial Programacion Android - slidepdf.com

http://slidepdf.com/reader/full/tutorial-programacion-android 8/17

 

Guia Android: Avanzando con la base de datosEn el primer artículo sobre Android hicimos el típico Hello World, explicando la estructurade Android, cómo funcionaba ese básico ejemplo ahora vamos a construir un bloc de notas para nuestro teléfono Android.

Debido a que son más archivos y más líneas de código que en el primer ejercicio os hecomprimido los archivos iniciales y finales en un archivo zip (Descargar 

 

). Asi siempretenéis código dónde comparar por si no os funciona algo. Pero como siempre, es mejor quevayáis siguiendo el tutorial y veáis la evolución del código en vez de mirar directamente la

solución.Conexión a la base de datos

Una vez que habéis creado el proyecto Android seleccionando un proyecto existente(Notas), podéis ver la estructura de archivos. Hay ya algunos archivos creados pero el únicoque he dejado con información es /src/com.android.demo.notepad1/NotasDbAdapter.java.Este archivo se va a encargar de conectarse a la base de datos para que no tengamos queestar lidiando con esto en otras partes del código. Recordad que estamos en un esquemaMVC. Este va a ser nuestro primer modelo. Miremos el código en general:

?0102030405060

70809101

public class NotasDbAdapter {

  // variables varias...

 private static class DatabaseHelper extends SQLiteOpenHelper {

 DatabaseHelper(Context context) {

super(context, DATABASE_NAME, null, DATABASE_VERSION);}

 @Override

public void onCreate(SQLiteDatabase db) {...} 

@Overridepublic void onUpgrade(SQLiteDatabase db, int oldVersion, int

newVersion) {...}}

 /*** Constructor - pasa el contexto para poder abrir o crear la DB*/

public NotasDbAdapter(Context ctx) {...}

Page 9: Tutorial Programacion Android

5/8/2018 Tutorial Programacion Android - slidepdf.com

http://slidepdf.com/reader/full/tutorial-programacion-android 9/17

 

11213141516171819

20212223242526272829303

13233343

 /*** Abre la base de datos de notas. Si no puede abrirla, la crea. Si

no se puede* lanza una excepcion*/

public NotasDbAdapter open() throws SQLException {...} public void close() {...}

 /*** Inserta una nueva nota con el t’tulo y el texto dados. Si se

crea correctamente* devuelve el rowId, en caso contrario, devuelve -1 para indicar

que ha habido* un error..*/

public long createNote(String title, String body) {...} 

/*** Borra la nota con el rowId dado*/

public boolean deleteNote(long rowId) {...}

 /*** Devuelve un Cursor apuntando a la lista de todas las notas*/

public Cursor fetchAllNotes() {...}

 /*** Devuelve un Cursor apuntando a la nota con el rowId dado

*/public Cursor fetchNote(long rowId) throws SQLException {...} 

/*** Actualiza la nota con los detalles dados.*/

public boolean updateNote(long rowId, String title, String body){...}}

Page 10: Tutorial Programacion Android

5/8/2018 Tutorial Programacion Android - slidepdf.com

http://slidepdf.com/reader/full/tutorial-programacion-android 10/17

 

53637383940414243

44454647484950515253545

5565758

Page 11: Tutorial Programacion Android

5/8/2018 Tutorial Programacion Android - slidepdf.com

http://slidepdf.com/reader/full/tutorial-programacion-android 11/17

 

Tenemos métodos para crear, actualizar, abrir y cerrar la base de datos. Y luego losmétodos CRUD para crear una nueva nota, devolver su información (o la de varias notas),actualizarla y borrarla. Esta clase es muy importante ya que estará en todas vuestras apps deuna forma u otra asi que miremos método a método.

?

01020304050607080910111

213141516171819

private static class DatabaseHelper extends SQLiteOpenHelper { 

DatabaseHelper(Context context) {super(context, DATABASE_NAME, null, DATABASE_VERSION);}

 @Override

public void onCreate(SQLiteDatabase db) {db.execSQL(DATABASE_CREATE);

}

 @Override

public void onUpgrade(SQLiteDatabase db, int oldVersion, intnewVersion) {

Log.w(TAG, "Upgrading database from version " + oldVersion + "to "

+ newVersion + ", which will destroy all old data");// sentencia droponCreate(db);

}}

Esta clase auxiliar nos permitirá abrir la base de datos, crearla si no existe y actualizarla allanzar una nueva versión. La sentencia SQL para crear es:

// sentencia create

?

Page 12: Tutorial Programacion Android

5/8/2018 Tutorial Programacion Android - slidepdf.com

http://slidepdf.com/reader/full/tutorial-programacion-android 12/17

 

1private static final String DATABASE_CREATE = "create table notes (_idinteger primary key autoincrement," + "title text not null, body text notnull);";

Cómo podéis haber observado ya antes, estamos utilizando la base de datos SQLite, es parecida a MySQL pero tiene pequeños detalles diferentes. Con esto ya tenemos creada la

 base de datos. Veamos el método para insertar notas:?1234567

public long createNote(String title, String body) {ContentValues initialValues = new ContentValues();initialValues.put(KEY_TITLE, title);initialValues.put(KEY_BODY, body);

 return mDb.insert(DATABASE_TABLE, null, initialValues);

}

A través de la clase ContentValues guardamos la información con el método put y lainsertamos. Para actualizar es casi igual pero usamos el método update en vez de insert.

Hay que acordarse de indicar el rowId:?

1234567

public boolean updateNote(long rowId, String title, String body) {ContentValues args = new ContentValues();args.put(KEY_TITLE, title);args.put(KEY_BODY, body);

 return mDb.update(DATABASE_TABLE, args, KEY_ROWID + "=" + rowId,

null) > 0;}

El método borrar es muy obvio asi que pasamos a recuperar una nota de la base de datos:

?0102030405

060708091

public Cursor fetchNote(long rowId) throws SQLException { 

Cursor mCursor =

 mDb.query(true, DATABASE_TABLE, new String[] {KEY_ROWID,

KEY_TITLE, KEY_BODY}, KEY_ROWID + "=" + rowId, null,null, null, null, null);

if (mCursor != null) {mCursor.moveToFirst();

}

return mCursor;

 }

Page 13: Tutorial Programacion Android

5/8/2018 Tutorial Programacion Android - slidepdf.com

http://slidepdf.com/reader/full/tutorial-programacion-android 13/17

 

0111213

Hacemos una query indicando que queremos un array de tres strings con los tres camposque queremos, y con la condición de rowId. El resto de los parámetros se usan si queremoshacer groupBy, having u orderBy. Después comprobamos que no está vacío y si es asímovemos el cursor a la primera posición que apunta a la nota que queremos.

Insertando notas

Vamos a modificar el layout de la actividad inicial /res/layout/notepad_list.xml 

?0

102030405060

70809101112

1314

<?xml version="1.0" encoding="utf-8"?><LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"

android:layout_width="wrap_content"android:layout_height="wrap_content">

 

<ListView android:id="@android:id/list"android:layout_width="wrap_content"android:layout_height="wrap_content"/>

<TextView android:id="@android:id/empty"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="@string/no_notes"/>

 </LinearLayout>

Tenemos dos elementos: una lista y un campo de texto. El TextView sólo se muestra si lalista está vacía. Android sabe esto gracias a empty, que está unido al valor de list. A travésde android:id="@android:id/list" indicamos que queremos que esa lista se rellene conlos valores de la variable list de la actividad.

Page 14: Tutorial Programacion Android

5/8/2018 Tutorial Programacion Android - slidepdf.com

http://slidepdf.com/reader/full/tutorial-programacion-android 14/17

 

Para mostrar la información que aparece en cada fila de la lista necesitamos crear un nuevotemplate. Creamos un nuevo archivo /src/layout/notes_row.xml 

?12

345

<?xml version="1.0" encoding="utf-8"?><TextView android:id="@+id/text1"

xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="wrap_content"android:layout_height="wrap_content"/>

En el campo de texto (TextView) vamos a mostrar solo el contenido de la variable text1 dela actividad. Antes de ir a la actividad mirad la clase R.java que os dije en el anterior tutorial que Android la manejaba automáticamente. Podéis ver cómo ha añadido el archivonuevo y la variable text1.

Vayamos ahora con Notas.java, miremos su estructura:

?12345678

public class Notas extends Activity {

 public void onCreate(Bundle savedInstanceState) {...}

 public boolean onCreateOptionsMenu(Menu menu) {...}

 public boolean onOptionsItemSelected(MenuItem item) {...}

}

onCreate() es el método principal de la actividad donde ejecutaremos todo nuestro código.onCreateOptionsMenu() creará el menú de opciones y onOptionsItemSelected() estaráatento a qué botón del menú presionamos para ejecutar la acción correspondiente. Repitoque es sólo sobre acciones sobre el menú, las acciones de otros botones o enlaces van enotros métodos, exactamente con Listeners, pero eso ya lo veremos más adelante.

Lo primero que vamos a hacer es convertir a Notas en una actividad de lista, para elloshacemos que extienda a ListActivity:

?1public class Notas extends ListActivity

Una combinación de teclas muy útil para arreglar los imports de los paquetes es ctrl-shift-Oen Windows o Linux, o cmd-shift-O en el Mac.

Queremos que en la pantalla principal de Notas muestre la lista de notas, para ello tiene queconectarse a la base de datos, coger la información y mostrarla en el layout que hemoshecho antes:

?01020304

private NotasDbAdapter mDbHelper; @Override

public void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.notepad_list);// new notasmDbHelper.open();

Page 15: Tutorial Programacion Android

5/8/2018 Tutorial Programacion Android - slidepdf.com

http://slidepdf.com/reader/full/tutorial-programacion-android 15/17

 

050607080910

fillData();}

Declaramos el objeto fuera para que esté disponible a todos los métodos, fijamos que ellayout sea notepad_list (fijaros como referenciamos aquí al layout, no usamos urls odirectorios, si no referencia mediante la clase R.java). Vamos a coger la información en unmétodo privado para que quede todo más ordenado:

?01020304050

60708091011

1213

private void fillData() {// Recuperamos todas las notas de la DB y creamos una lista Cursorc = mDbHelper.fetchAllNotes();startManagingCursor(c);

String[] from = new String[] { NotasDbAdapter.KEY_TITLE };int[] to = new int[] { R.id.text1 };

/ Y creamos un adaptador array para que vaya mostrando las filasSimpleCursorAdapter notes =

new SimpleCursorAdapter(this, R.layout.notes_row, c, from, to);setListAdapter(notes);

}

Ya empezamos a ver más métodos internos de Android, os animo a entrar a la API deAndroid e ir viendo lo que hacen exactamente, es la mejor forma de aprender. En fillData()recuperamos todas las notas de la DB con el método fetchAllNotes que hicimos al principio, y luego creamos un adaptador que relaciona el campo del objeto que queremos

Page 16: Tutorial Programacion Android

5/8/2018 Tutorial Programacion Android - slidepdf.com

http://slidepdf.com/reader/full/tutorial-programacion-android 16/17

 

(KEY_TITLE) con la variable text1 (otra vez referenciada por  R.java) e indica quequeremos que use el layout notes_row.xml que hemos creado antes. Por último avisa a ListActivity que notes va a ser la lista que queremos mostrar.

Con estas modificaciones ya podríamos ver las notas pero no tenemos ninguna asi quevamos a crear la actividad en un momento para que podamos probarlo más a fondo. En

 Notas.java añadamos el botón de añadir nota. Basta con llamar a la clase superior paracrear el menu y añadir el botón de Add Item en la primera posición.

?12345678

public static final int INSERT_ID = Menu.FIRST;

 @Override

public boolean onCreateOptionsMenu(Menu menu) {boolean result = super.onCreateOptionsMenu(menu);menu.add(0, INSERT_ID, 0, R.string.menu_insert);

return result;}

Y añadimos otra variable de texto a strings.xml

?1<string name="menu_insert">Add Item</string>

Perfecto, ahora hagamos que al hacer click en este nuevo botón ejecute la nueva actividad para mostrar el formulario. Para eso modificamos el método onOptionsItemSelected()también de Notas.java

?010

203040506070

80910

@Override

public boolean onOptionsItemSelected(MenuItem item) {switch (item.getItemId()) {case INSERT_ID:

createNote();

return true;}

 return super.onOptionsItemSelected(item);

}

Capturamos el Id de la opción del menú y si es la primera ejecutamos el métodocreateNote(). En un primer paso vamos a hacer que inserte una nota con un título y textofijos. En el siguiente paso ya crearemos el formulario:

Page 17: Tutorial Programacion Android

5/8/2018 Tutorial Programacion Android - slidepdf.com

http://slidepdf.com/reader/full/tutorial-programacion-android 17/17

 

?12345

private void createNote() {String noteName = "Note " + mNoteNumber++;mDbHelper.createNote(noteName, "");fillData();

}

La razón de llamar a fillData() de nuevo es para que recargue la lista una vez que se haterminado de ejecutar el evento de hacer click en la opción del menú Add Item.

Es hora de ver en acción lo que estamos viendo. Comprueba que no hay errores en ningúnarchivo, arregla los imports y ejecuta como un proyecto de Android. Si das a menu podrásañadir una nota e irás viendo como se crea una nota nueva cada vez que le das.Enhorabuena, hemos conseguido comunicarnos correctamente con la base de datos.