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 ArrayList resultados = 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.




