Ir al contenido principal

BDate Parte 7 - NotasList.java y Leer.java

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

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. 

Entradas populares de este blog

Northwind para Mysql y otras

Supongamos que necesitamos una base de datos para comenzar a hacer pruebas y a la vez necesitamos que esa base de datos contenga mucha información con la cual trabajar. En mis tiempos de universidad existía una base de datos que utilizábamos en los laboratorios con SQL Server y c# para mostrar los datos en algún formulario. El nombre era Northwind. El problema es que era solo para SQL Server, pero alguien en se dio a la tarea de exportar esa base de datos a MySql y es justo lo que te vengo a mostrar acá. Hace un tiempo atrás clone de los repositorios de Google Code   esa información (que como algunos de ustedes sabrá dejara de estar al servicio de todos en un tiempo). Modifique un poco la DB de Mysql para que se pudiera ejecutar el script sin ningún problema. Lo interesante de todo esto es que puedes utilizar los demás script para diferentes gestores de base de datos Se advierte que para poder usarlas adecuadamente hay que modificar los campos de tipo longblob y qu...

How to upload File from form data POST in Android with Retrofit 2

 The last day I explain how to upload a simple CSV file using node . And now I teach how to upload from android device. Get source code here:  GitHub This article is write in java... later I'll add the method for kotlin. The logic is not changed, only the format code. 1) Is necessary add the dependencies in gradle: module implementation 'com.google.code.gson:gson:2.8.6' // RETROFIT // implementation 'com.squareup.retrofit2:retrofit:2.6.2' implementation 'com.squareup.retrofit2:converter-gson:2.6.2' implementation 'com.squareup.retrofit2:converter-scalars:2.5.0' 2) Add permissions in AndroidManifest.xml and modified the application for work with network security policy <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> in applitacion add ...

Abrir modal cuando se cargue la pagina web

Se advierte que blogger puede cambiar el resultado, pero tranquilo, te dejo un enlace donde lo puedes ver sin mas ni mas haciendo click aquí Una de las cosas interesantes de  usar Bootstrap en tus proyectos es que ya trae muchas funcionalidades como los modales. Algo en particular que me han preguntado mas de una vez es lo siguiente: ¿Puedo abrir un modal al momento de cargar una pagina web? La respuesta es un simple SI y te muestro como hacerlo de manera rápida Ahora simplemente tenemos que mandar a llamar un fragmento de código en nuestro JQuery: $(function(){ $("#myModal").modal(); }); Es algo simple cuando ya conoces la solución claro y espero te sirva mucho