Luego de algunas semanas sin publicar nada, regreso para continuar el mini tutorial de como hacer la app BDate, el cual es un simple bloc de notas (al inicio se llamaria Notepad Litle, pero ya existe uno con ese nombre), mejor metamos manos a la obra, porque ya tiene como 3 semanas de retraso.
Nuestra aplicación hasta este punto, ya es posible crear las notas, ademas agrega las notas a la actividad de lista (es decir ya hace uso de NotasList), y se puede observar en las siguientes imagenes.
Recordemos que para ver las notas hay que hacer un click a Mostrar notas de la actividad principal.
Hasta aquí todo bien, pero no hemos agregado código alguno para mostrar las notas (en realidad si, pero modificamos las cosas y es como si iniciáramos) para que esto funcione con la base de datos es necesario hacer lo siguiente.
Lo primero que haremos es agregar el siguiente método a la clase DBAdapter.java
Entramos a NotasList .java y creamos una instancia de ListView, para manejar los eventos que utilizaremos, recordemos que estamos utilizando ListActivity y que ademas no hacemos uso de ningún layout, ya que el código se encarga de generar esto por nosotros (mucho mas adelante personalizaremos a full este aspecto).
Es probable que el script que uso para mostrar el código de manera ordenada falle, así que como siempre dejare en la parte de abajo el código actual de esta aplicación, por si alguien la necesita y no se da cuenta en donde se genero el error del script.
La clase Leer la teníamos de la siguiente manera
Ahora lo modificamos para que trabaje con la base de datos y no con archivos externos a esta, así que lo dejamos de la siguiente manera
Como se darán cuenta, se ha modificado, la clase anterior y el layout leer.xml, el cual queda de la siguiente manera
Con esto ya tenemos la presentación de la nota
Nuestra aplicación hasta este punto, ya es posible crear las notas, ademas agrega las notas a la actividad de lista (es decir ya hace uso de NotasList), y se puede observar en las siguientes imagenes.
Recordemos que para ver las notas hay que hacer un click a Mostrar notas de la actividad principal.
Hasta aquí todo bien, pero no hemos agregado código alguno para mostrar las notas (en realidad si, pero modificamos las cosas y es como si iniciáramos) para que esto funcione con la base de datos es necesario hacer lo siguiente.
Lo primero que haremos es agregar el siguiente método a la clase DBAdapter.java
public Cursor getNota(long row) { String [] getOneMain = {KEY_ROWID, KEY_TITULO, KEY_NOTA }; Cursor miCursor = db.query(DATABASE_TABLE, getOneMain, KEY_ROWID+"="+row, null, null, null, null); if(miCursor != null) { miCursor.moveToFirst(); } return miCursor; }
Entramos a NotasList .java y creamos una instancia de ListView, para manejar los eventos que utilizaremos, recordemos que estamos utilizando ListActivity y que ademas no hacemos uso de ningún layout, ya que el código se encarga de generar esto por nosotros (mucho mas adelante personalizaremos a full este aspecto).
//implementamos la interface OnItemClickListener public class NotasList extends ListActivity implements OnItemClickListener{ private ArrayListresultados = new ArrayList (); private DBAdapter myAdapBD; ListView lista; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //obtenemos cualquier lista que se encuentre de la siguiente manera lista = getListView(); //estos metodos ya los teniamos asi que no los explicare abrirDBAdapter(); mostrarResultados(); //le indicamos el evento que se generara, el cual es OnClickListener lista.setOnItemClickListener(this); } //al implementar la interface hacemos uso del metodo onItemClick public void onItemClick(AdapterView arg0, View arg1, int arg2, long arg3) { // TODO Auto-generated method stub //creamos un intent hacia la actividad que mostrara el contenido Intent i = new Intent(NotasList.this, Leer.class); //le decimos que lleve un extra, que nos ayudara a saber el id en la base de datos i.putExtra("ID", arg2+1); startActivity(i); }
Es probable que el script que uso para mostrar el código de manera ordenada falle, así que como siempre dejare en la parte de abajo el código actual de esta aplicación, por si alguien la necesita y no se da cuenta en donde se genero el error del script.
La clase Leer la teníamos de la siguiente manera
package com.nayosx.nl; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.InputStreamReader; import android.app.Activity; import android.database.Cursor; import android.os.Bundle; import android.os.Environment; import android.widget.TextView; import android.widget.Toast; public class Leer extends Activity { private TextView mostrar; private String estado; @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.leer); inicializar(); } private void inicializar() { mostrar = (TextView) findViewById(R.id.mostrar); titu = (TextView) findViewById(R.id.titulo); estado = Environment.getExternalStorageState(); String titu = "prueba"; try { if(estado.equals(Environment.MEDIA_MOUNTED)) { File ruta = Environment.getExternalStorageDirectory(); File archivo = new File(ruta, titu); InputStreamReader isr = new InputStreamReader(new FileInputStream(archivo)); BufferedReader br = new BufferedReader(isr); StringBuilder texto = new StringBuilder(); String linea; while((linea=br.readLine()) != null) { texto.append(linea); texto.append("\n"); } br.close(); isr.close(); mostrar.setText(texto.toString()); } } catch(Exception e) { Toast.makeText(this, "No se pudo leer el archivo: "+titu, Toast.LENGTH_LONG).show(); } } }
Ahora lo modificamos para que trabaje con la base de datos y no con archivos externos a esta, así que lo dejamos de la siguiente manera
package com.nayosx.nl; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.InputStreamReader; import android.app.Activity; import android.database.Cursor; import android.os.Bundle; import android.os.Environment; import android.widget.TextView; import android.widget.Toast; public class Leer extends Activity { //agregamos otro textview llamado titulo, para mostrarlo en el layout private TextView mostrar, titu; //creamos variables auxiliares para titulo y nota String titulo ="", nota = ""; //una instancia a nuestro adaptador de la base de datos DBAdapter db ; @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.leer); inicializar(); } private void inicializar() { //inicializamos el adaptador db = new DBAdapter(this); //inicializamos los textview mostrar = (TextView) findViewById(R.id.mostrar); titu = (TextView) findViewById(R.id.titulo); //abrimos la base de datos db.abrir(); //creamos un cursor para obtener los datos Cursor c; //con un Bundle obtenemos los extras del intent Bundle bl = getIntent().getExtras(); //le indicamos a el cursor, que queremos obtener una nota c = db.getNota(bl.getInt("ID")); //asignamos el titulo el valor que devuelve el cursor titu.setText(c.getString(1)); //lo mismo con la nota mostrar.setText(c.getString(2)); //cerramos la base de datos y listo db.cerrar(); } }
Como se darán cuenta, se ha modificado, la clase anterior y el layout leer.xml, el cual queda de la siguiente manera
Con esto ya tenemos la presentación de la nota
Para tener el código hasta este punto da clic aqui, esto es por los posibles errores que genere el script que uso para mostrar el código.