informe tecnico unidad 5 tap

12
INSTITUTO TECNOLÓGICO SUPERIOR DE FELIPE CARRILLO PUERTO Ingeniería En Sistemas Computacionales Tópicos avanzados de programación Informe Técnico unidad 5 Profesor: Niels Henryk Aranda Cuevas Integrantes: Irving Saúl Che Canul AULA: J-4 GRUPO: B 02/07/14

Upload: irving-che

Post on 24-Jun-2015

165 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: Informe tecnico unidad 5 tap

INSTITUTO TECNOLÓGICO SUPERIOR DE

FELIPE CARRILLO PUERTO

Ingeniería En Sistemas Computacionales

Tópicos avanzados de programación

Informe Técnico unidad 5

Profesor:

Niels Henryk Aranda Cuevas

Integrantes:

Irving Saúl Che Canul

AULA: J-4 GRUPO: B

02/07/14

Page 2: Informe tecnico unidad 5 tap

7 - Control ListView

Introducción:

El control ListView a diferencia del Spinner que se cierra luego de seleccionar un elemento

permanecen visibles varios elementos (se lo utiliza cuando hay que mostrar muchos

elementos); Si la lista no entra en el espacio que hemos fijado para el ListView nos permite

hacer scroll de los mismos. El control ListView se encuentra en la pestaña "Compositive".

Problema:

Disponer un ListView con los nombres de paises de sudamérica. Cuando se seleccione un

país mostrar en un TextView la cantidad de habitantes del país seleccionado.

La interfaz visual a implementar es la siguiente (primero disponemos un TextView

(llamado tv1) y un ListView (llamado listView1)):

Código fuente:

package com.javaya.proyecto006;

import android.app.Activity;

import android.os.Bundle;

import android.view.Menu;

import android.view.View;

import android.widget.AdapterView;

import android.widget.AdapterView.OnItemClickListener;

import android.widget.ArrayAdapter;

import android.widget.ListView;

import android.widget.TextView;

public class MainActivity extends Activity {

private String[] paises = { "Argentina", "Chile", "Paraguay",

"Bolivia",

"Peru", "Ecuador", "Brasil", "Colombia",

"Venezuela", "Uruguay" };

private String[] habitantes = { "40000000", "17000000", "6500000",

"10000000", "30000000", "14000000", "183000000",

"44000000",

"29000000", "3500000" };

private TextView tv1;

private ListView lv1;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

tv1=(TextView)findViewById(R.id.tv1);

lv1 =(ListView)findViewById(R.id.listView1);

Page 3: Informe tecnico unidad 5 tap

ArrayAdapter <String> adapter = new

ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, paises);

lv1.setAdapter(adapter);

lv1.setOnItemClickListener(new OnItemClickListener() {

@Override

public void onItemClick(AdapterView<?> parent, View v, int

posicion, long id) {

tv1.setText("Población de "+

lv1.getItemAtPosition(posicion) + " es "+ habitantes[posicion]);

}

});

}

@Override

public boolean onCreateOptionsMenu(Menu menu) {

// Inflate the menu; this adds items to the action bar if

it is present.

getMenuInflater().inflate(R.menu.activity_main, menu);

return true;

}

}

Conclusión:

Como hemos podido observar el listview nos sirve para poder visualizar varios elementos

al mismo tiempo un claro ejemplo es definir los vectores paralelos donde almacenamos los

nombres de paises y en el otro almacenamos la cantidad de habitantes de esos países. Se

definen objetos de tipo TextView y ListView, el método oncreate obtenemos las referencias

de los objetos ya creados, uno de los aprendizajes más significativos fue la utilización del

método setOnItemClicListener el cual se implementó en la clase ListView . el método

OnItemClickListener que nos sirva para las interfaces cuando damos click en la listview, en

el método onItemClick modificamos el contenido del TextView con el nombre del país y la

cantidad de habitantes.

8 - Control ImageButton

Introducción:

Es una clase muy similar al listview llamada ImageButton que tiene la misma filosofía de manejo

con la diferencia que puede mostrar una imagen en su superficie.

Page 4: Informe tecnico unidad 5 tap

Problema:

Disponer un objeto de la clase ImageButton que muestre una imagen de un teléfono.

Cuando se presione mostrar en un control TextView el mensaje "Llamando".

Código fuente: package com.javaya.proyecto007;

import android.app.Activity;

import android.os.Bundle;

import android.view.Menu;

import android.view.View;

import android.widget.TextView;

public class MainActivity extends Activity {

private TextView tv1;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

tv1=(TextView)findViewById(R.id.tv1);

}

@Override

public boolean onCreateOptionsMenu(Menu menu) {

// Inflate the menu; this adds items to the action bar if it is

present.

getMenuInflater().inflate(R.menu.activity_main, menu);

return true;

}

//Este método se ejecutará cuando se presione el ImageButton

public void llamar(View view) {

tv1.setText("Llamando");

}

}

Conclusión:

El siguiente problema es muy simple ya que es algo muy similar a lo que hemos estado viendo netbeens, cuando creamos botones en la interfaz y agregamos una imagen al botón, al momento de realizar la acción de presionar se debe llamar la imagen en el mismo instante, la parte más importante es inicializar la propiedad OnClick del objeto ib1 con el nombre del método "llamar" (recordemos que esto lo hacemos accediendo a la propiedad On Click en la ventana de "Properties").

Page 5: Informe tecnico unidad 5 tap

9 - Lanzar un segundo "Activity"

Introducción:

Es muy común que una aplicación tenga más de una ventana. Para implementar esto en

Android debemos plantear una segunda clase que también herede de la clase Activity

(tengamos en cuenta que cuando utilizamos ADT automáticamente cuando creamos un

proyecto nos crea el archivo XML y java de la primer Activity); Vamos a ver en este

concepto los pasos que debemos dar para crear otro Activity y como activarlo desde el

Activity principal.

Problema:

Confeccionar un programa que muestre en la ventana principal un botón que al ser

presionado muestre otra ventana (Activity) mostrando un TextView con el nombre del

programador de la aplicación y un botón para cerrar la ventana o actividad.

El código fuente de la actividad principal queda:

package com.javaya.proyecto008;

import android.app.Activity;

import android.content.Intent;

import android.os.Bundle;

import android.view.Menu;

import android.view.View;

public class MainActivity extends Activity {

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

}

@Override

public boolean onCreateOptionsMenu(Menu menu) {

// Inflate the menu; this adds items to the action bar if it is

present.

getMenuInflater().inflate(R.menu.activity_main, menu);

return true;

}

public void lanzar(View view) {

Intent i = new Intent(this, AcercaDe.class );

startActivity(i);

}

}

Page 6: Informe tecnico unidad 5 tap

El código fuente de la actividad AcercaDe queda:

package com.javaya.proyecto008;

import android.app.Activity;

import android.os.Bundle;

import android.view.View;

public class AcercaDe extends Activity {

/** Called when the activity is first created. */

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.acercade);

}

public void cerrar(View view) {

finish();

}

}

Conclusión:

El método Activity hace referencia a una nueva interfaz o una nueva ventana de

vizualizacion, se crea el proyecto que fue la primera actividad y luego la segunda clase que

es la que llamamos como la segunda actividad. En este segundo ejercicio se utiliza oncreate

para crear las ventanas y el onclick para los botones. También agremos un botón al final y

el método finish () que tiene como objetivo cerrar el programa y liberar espacio de

memoria.

10 - Lanzar un segundo "Activity" y pasar parámetros.

Introducción:

Un programa puede tener más de una ventana representando cada ventana con una clase

que hereda de Activity.

Una situación muy común es que la primera ventana necesite enviar datos a la segunda para

que a partir de estos proceda a efectuar una acción.

Problema:

Confeccionar un programa que solicite el ingrese de una dirección de un sitio web y

seguidamente abrir una segunda ventana que muestre dicha página.

Page 7: Informe tecnico unidad 5 tap

El código fuente de esta Activity es:

package com.androidya.proyecto010;

import android.app.Activity;

import android.content.Intent;

import android.os.Bundle;

import android.view.Menu;

import android.view.View;

import android.widget.EditText;

public class MainActivity extends Activity {

private EditText et1;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

et1 = (EditText) findViewById(R.id.et1);

}

@Override

public boolean onCreateOptionsMenu(Menu menu) {

// Inflate the menu; this adds items to the action bar if it is

present.

getMenuInflater().inflate(R.menu.activity_main, menu);

return true;

}

public void ejecutar(View view) {

Intent i = new Intent(this, Actividad2.class);

i.putExtra("direccion", et1.getText().toString());

startActivity(i);

}

}

Tenemos que crear el archivo Java donde dispondremos la funcionalidad de

la segunda ventana (Activity)

Creamos una nueva clase al proyecto desde el menú contextual(presionamos

el botón derecho del mouse sobre el paquete com.androidya.proyecto010)

Al nombre de la clase la llamamos Actividad2 y debemos especificar que

hereda de la clase android.app.Activity

Ahora tenemos que modificar el archivo Java generado agregando del método

onCreate con esto:

package com.androidya.proyecto010;

import android.app.Activity;

import android.os.Bundle;

import android.view.View;

import android.webkit.WebView;

Page 8: Informe tecnico unidad 5 tap

public class Actividad2 extends Activity {

private WebView webView1;

@Override

protected void onCreate(Bundle savedInstanceState) {

// TODO Auto-generated method stub

super.onCreate(savedInstanceState);

setContentView(R.layout.actividad2);

webView1 = (WebView) findViewById(R.id.webView1);

Bundle bundle = getIntent().getExtras();

webView1.loadUrl("http://" + bundle.getString("direccion"));

}

public void finalizar(View view) {

finish();

}

}

Conclusión:

Este ejercicio es es parecido al anterior a diferencia de que ahora usamos el webview para

poder acceder a internet desde el apk y los valores agregados a la primera activity para

poder pasarlos a la segunda activity se usó el método getExtras(), podemos notar que

existen líneas de código heredadas para la reutilización de las mismas.

14 - Almacenamiento en una base de datos SQLite

Introducción:

Una herramienta nativa de Android para almacenar datos en una base de datos llamada

SQLite. SQLite es una base de datos Open Source, es muy popular en muchos dispositivos

pequeños, como Android. Las ventajas que presenta utilizar SQLite es que no requiere

configuración, no tiene un servidor de base de datos ejecutándose en un proceso separado y

es relativamente simple su empleo.

Problema:

Confeccionar un programa que permita almacenar los datos de votantes de una elección.

Crear la tabla votantes y definir los campos dni (documento de identidad), nombre del

votante, colegio donde vota y número de mesa donde vota.

El programa debe permitir:

1 - Carga de personas.

2 - Consulta por el dni (para saber donde vota)

3 - Borrado de personas

Page 9: Informe tecnico unidad 5 tap

4 - Modificación de datos.

En nuestro problema implementaremos una nueva clase llamada

AdminSQLiteOpenHelper que herede de la clase SQLiteOpenHelper:

package com.javaya.proyecto015;

import android.content.Context;

import android.database.sqlite.SQLiteDatabase;

import android.database.sqlite.SQLiteDatabase.CursorFactory;

import android.database.sqlite.SQLiteOpenHelper;

public class AdminSQLiteOpenHelper extends SQLiteOpenHelper {

public AdminSQLiteOpenHelper(Context context, String nombre,

CursorFactory factory, int version) {

super(context, nombre, factory, version);

}

@Override

public void onCreate(SQLiteDatabase db) {

db.execSQL("create table votantes(dni integer primary key, nombre

text, colegio text, nromesa integer)");

}

@Override

public void onUpgrade(SQLiteDatabase db, int versionAnte, int

versionNue) {

db.execSQL("drop table if exists votantes");

db.execSQL("create table votantes(dni integer primary key, nombre

text, colegio text, nromesa integer)");

}

}

Ahora veamos la otra clase que implementará las altas, bajas,

modificaciones y consultas:

package com.javaya.proyecto015;

import android.app.Activity;

import android.content.ContentValues;

import android.database.Cursor;

import android.database.sqlite.SQLiteDatabase;

import android.os.Bundle;

import android.view.Menu;

import android.view.View;

import android.widget.EditText;

import android.widget.Toast;

public class MainActivity extends Activity {

private EditText et1, et2, et3, et4;

Page 10: Informe tecnico unidad 5 tap

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

et1 = (EditText) findViewById(R.id.editText1);

et2 = (EditText) findViewById(R.id.editText2);

et3 = (EditText) findViewById(R.id.editText3);

et4 = (EditText) findViewById(R.id.editText4);

}

@Override

public boolean onCreateOptionsMenu(Menu menu) {

// Inflate the menu; this adds items to the action bar if it is

present.

getMenuInflater().inflate(R.menu.activity_main, menu);

return true;

}

public void alta(View v) {

AdminSQLiteOpenHelper admin = new AdminSQLiteOpenHelper(this,

"administracion", null, 1);

SQLiteDatabase bd = admin.getWritableDatabase();

String dni = et1.getText().toString();

String nombre = et2.getText().toString();

String colegio = et3.getText().toString();

String nromesa = et4.getText().toString();

ContentValues registro = new ContentValues();

registro.put("dni", dni);

registro.put("nombre", nombre);

registro.put("colegio", colegio);

registro.put("nromesa", nromesa);

bd.insert("votantes", null, registro);

bd.close();

et1.setText("");

et2.setText("");

et3.setText("");

et4.setText("");

Toast.makeText(this, "Se cargaron los datos de la persona",

Toast.LENGTH_SHORT).show();

}

public void consulta(View v) {

AdminSQLiteOpenHelper admin = new AdminSQLiteOpenHelper(this,

"administracion", null, 1);

SQLiteDatabase bd = admin.getWritableDatabase();

String dni = et1.getText().toString();

Cursor fila = bd.rawQuery(

"select nombre,colegio,nromesa from votantes where dni="

+ dni, null);

if (fila.moveToFirst()) {

et2.setText(fila.getString(0));

et3.setText(fila.getString(1));

et4.setText(fila.getString(2));

} else

Toast.makeText(this, "No existe una persona con dicho dni",

Toast.LENGTH_SHORT).show();

Page 11: Informe tecnico unidad 5 tap

bd.close();

}

public void baja(View v) {

AdminSQLiteOpenHelper admin = new AdminSQLiteOpenHelper(this,

"administracion", null, 1);

SQLiteDatabase bd = admin.getWritableDatabase();

String dni = et1.getText().toString();

int cant = bd.delete("votantes", "dni=" + dni, null);

bd.close();

et1.setText("");

et2.setText("");

et3.setText("");

et4.setText("");

if (cant == 1)

Toast.makeText(this, "Se borró la persona con dicho

documento",

Toast.LENGTH_SHORT).show();

else

Toast.makeText(this, "No existe una persona con dicho

documento",

Toast.LENGTH_SHORT).show();

}

public void modificacion(View v) {

AdminSQLiteOpenHelper admin = new AdminSQLiteOpenHelper(this,

"administracion", null, 1);

SQLiteDatabase bd = admin.getWritableDatabase();

String dni = et1.getText().toString();

String nombre = et2.getText().toString();

String colegio = et3.getText().toString();

String nromesa = et4.getText().toString();

ContentValues registro = new ContentValues();

registro.put("nombre", nombre);

registro.put("colegio", colegio);

registro.put("nromesa", nromesa);

int cant = bd.update("votantes", registro, "dni=" + dni, null);

bd.close();

if (cant == 1)

Toast.makeText(this, "se modificaron los datos",

Toast.LENGTH_SHORT)

.show();

else

Toast.makeText(this, "no existe una persona con dicho

documento",

Toast.LENGTH_SHORT).show();

}

}

Page 12: Informe tecnico unidad 5 tap

Conclusión:

Una base de datos es una colección de datos organizados, en android encontramos el sistema de sqlite esta herramienta en Android es muy fácil y sencilla para utilizar, además como ya se había mencionado es nativa de android, en sqlite encontramos el método SQLiteOpenHelper que es el que nos permite crear la base de datos, usamos ahora los métodos onCreate y onUpgrade. Como ya vimos oncreate nos sirve para crear un constructor y onupgrade nos sirve para actualizarlas.