Ir al contenido principal

BDate Parte 3 - Codeando las clases y guardando en memoria externa

Ya hemos visto como queda la actividad principal, ahora comenzaremos a trabajar en las otras dos actividades, comencemos con la de Crear.java. El código queda de la siguiente manera

package com.nayosx.nl;

import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStreamWriter;
import android.app.Activity;
import android.os.Bundle;
import android.os.Environment;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class Crear extends Activity implements OnClickListener{


    private Button guardar, cancelar;
 private EditText titulo, nota;
    

    private String titu;
 private String estado;



 @Override
 protected void onCreate(Bundle savedInstanceState) {
  // TODO Auto-generated method stub
  super.onCreate(savedInstanceState);
  setContentView(R.layout.crear);
  inicializar();
 }



 private void inicializar()
 {
  estado = Environment.getExternalStorageState();
  guardar = (Button) findViewById(R.id.bGuardar);
  cancelar = (Button) findViewById(R.id.bCancelar);
  
  titulo = (EditText)findViewById(R.id.titulo);
  nota = (EditText)findViewById(R.id.nota);
  
  guardar.setOnClickListener(this);
  cancelar.setOnClickListener(this);
  
 }



 public void onClick(View v) {
  // TODO Auto-generated method stub
  switch(v.getId())
  {
  case R.id.bGuardar:
   guardarArchivo();
   break;
  case R.id.bCancelar:
   finish();
   break;
  }
 }




 private void guardarArchivo() {
  // TODO Auto-generated method stub
  titu = titulo.getText().toString();
  try
  {
   
   if(estado.equals(Environment.MEDIA_MOUNTED))
   {
    File ruta = Environment.getExternalStorageDirectory();
    File archivo = new File(ruta, titu);
    OutputStreamWriter save = new OutputStreamWriter(new FileOutputStream(archivo));
    save.write(nota.getText().toString());
    save.close();
   }
  }
  catch(Exception e)
  {
   Toast.makeText(this, "No se pudo guardar el archivo: "+titu, Toast.LENGTH_LONG).show();
  }
 }
}

Pasemos a explicar un poco como funciona esta clase, no explicare muchas cosas que ya hemos estado hablando desde hace mucho tiempo atras, asi que simplemente explicare lo justo y necesario.

Hay una variable llamada estado que es de tipo String con la cual haremos un if en donde preguntaremos si la memoria externa esta disponible o no (esto es temporal, luego usaremos una base de datos para guardar la información, pero a mas de alguno le puede servir la forma de guardar en la memoria externa). Esta variable se inicializa con el método estático que contiene  la clase Environment.

estado = Environment.getExternalStorageState();

Eso se hace dentro del método inicializar(), luego se trabaja con el método guardarArchivo() que es el que se encarga de guardar toda la información.

el metodo  guardarArchivo() tiene como finalidad guardar el texto que le agreguemos a el EditText llamado nota, pero tiene otras funciones antes de llevar a cabo tal finalidad.
private void guardarArchivo() {
  // TODO Auto-generated method stub
  titu = titulo.getText().toString();
  try
  {
   
   if(estado.equals(Environment.MEDIA_MOUNTED))
   {
    File ruta = Environment.getExternalStorageDirectory();
    File archivo = new File(ruta, titu);
    OutputStreamWriter save = new OutputStreamWriter(new FileOutputStream(archivo));
    save.write(nota.getText().toString());
    save.close();
   }
  }
  catch(Exception e)
  {
   Toast.makeText(this, "No se pudo guardar el archivo: "+titu, Toast.LENGTH_LONG).show();
  }
 }

Inicia con la variable titu, la cual almacena el titulo y el nombre del archivo a guardar, luego manejamos una posible excepción y dentro de ella hacemos uso de la sentencia if en donde miramos si la variable estado es igual a lo que contenga la constante estática MEDIA_MOUNTED, de ser así se crean dos instancias tipo File, una llamada ruta a la cual se le asigna el contenido de el método getExternalStorageDirectory() y la otra llamada archivo la cual crea en si el archivo en la ruta indicada y con el nombre indicado (como había dicho antes se trata de la variable titu), para terminar de generar dicho archivo hay que manejar el Stream para ello usamos una instancia OutputStreamWriter llamado save, como muchos de ustedes sabran el constructor de dicha instacia hace uso de otra instacia que la creamos dentro de el mismo constructor.

OutputStreamWriter save = new OutputStreamWriter(new FileOutputStream(archivo));
Luego simplemente guardamos dicho flujo con el metodo write() y dentro de sus parametros le pasamos el contenido de nota (es decir el contenido del EditText)
save.write(nota.getText().toString());

Para terminar simplemente cerramos el flujo (o Stream) con el metodo close() y dentro del catch simplemente le mostramos un mensaje al usuario, en donde le indicamos que no se pudo guardar el archivo. Y eso es todo con respecto a la clase Crear.java


La clase Leer.java

Bueno, esta clase es la mas fácil de usar e implementar ya que la hemos visto con anterioridad, simplemente haremos uso de otra variable llamada estado y de otra sentencia if para verificar que existe la memoria externa del dispositivo
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.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()
 {
  estado = Environment.getExternalStorageState();
  mostrar = (TextView) findViewById(R.id.mostrar);
  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();
  }
 }

}


Todo esto se hace dentro del método inicializar(), es identico a el metodo guardarArchivo() de la clase Crear.java, con la diferencia que no escribe, sino que lee dicho archivo, para presentarlo hace uso del TextView llamado mostrar, como todavía no hacemos uso de una base de datos para guardar los títulos, le indicamos un nombre a la variable titu (en este caso fue llamado prueba, así que cuando lo ejecuten y creen un archivo le tendrán que colocar como titulo el nombre de prueba, de lo contrario no mostrara nada).

Algo a tener totalmente en cuenta es el permiso que le tenemos que indicar al manifest de Android, quedando de la siguiente manera



Si no indicamos el permiso no servirá nuestra aplicación, así que asegurémonos de agregarlo antes de ejecutarla.

En la siguiente parte de este tutorial trabajaremos con una clase que nos ayudara con la base de datos para solventar mucho de los problemas que tenemos ahorita, no se preocupen, esto seguirá y lo dejaremos lo mas profesionalmente posible.

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 ...

Instalacion de apk desde el adb (Linux y Windows)

Por lo general siempre instalamos nuestras aplicaciones por medio de algún gestor oh tienda de aplicaciones como el Google Play oh F-Droid por mencionar a algunos. Pero que pasa cuando no podemos acceder a esas tiendas y hemos modificado algunas cosas del sistema como por ejemplo la eliminación del teclado, por el simple hecho de que no nos gusta, oh a ver quitado el propio launcher del sistema, aunque suene ilógico hay personas que lo hacen (yo por ejemplo lo he hecho a modo de prueba en un Kiosera que tuve, ya que me pareció demasiado pesado y lelo el launcher y el teclado por defecto y llegue a una optimizacion del SO de un 100%). Quizás eso es lo mejor de Android, el completo control que este te da si eres root, sin mas preámbulo te muestro como instalar las apk por medio del ADB de Android. Pero antes de que los vea me gustaría aclarar que esto es aplicable tanto para dispositivos físicos como emuladores, en el caso de ser dispositivos físicos asegúrate de tener los dr...