Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Informe tecnico unidad 5 tap

377 views

Published on

  • Be the first to comment

  • Be the first to like this

Informe tecnico unidad 5 tap

  1. 1. 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
  2. 2. 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);
  3. 3. 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.
  4. 4. 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").
  5. 5. 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); } }
  6. 6. 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.
  7. 7. 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;
  8. 8. 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
  9. 9. 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;
  10. 10. @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();
  11. 11. 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(); } }
  12. 12. 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.

×