Archive | abril 2012

Un nuevo entrenador se acerca a Android

 

Deja que este experto te guie en tu recorrido..
¿Que mejor que escuchar la mejor musica y el mejor entrenamiento echo por vos mismo y además que un experto te guie?

Ya no necesitas mas tener varios programas juntos..

Solo con Sport Trainer podes obtener el mejor resultado.

Imagen

Realizar un seguimiento y analizar sus resultados, compartir datos de entrenamiento y fotos con sus amigos, y sobre todo – ponerse en forma y mantenerse saludable.

Tenes la posibilidad de enviarte la info de tus sesiones de ejercicio y fotos a tu correo.

Prepararte tus listas de música personalizadas, nuestro entrenador durante el entrenamiento automáticamente parara la música en curso para brindarte toda la info y  luego seguir escuchando tu lista de temas.

Todo esto y más muy pronto en el Market.

Loading Workbench….

Este post es como recordatorio mas que nada, para aquellos como a mi se nos cuelga/congela (hangs)  eclipse, en la pantalla de inicio. Más concretamente esta..

Imagen

 

La solución en mi caso la encontré borrando un archivo de configuración situado aquí..

en tu workspace , luego en  .metadata/.plugins/org.eclipse.core.resources y borras el archivo .snap

 

 

 

Primeros pasos con Sqlite en Android

El motor de bases de datos en Android es Lite. SqLite es una base de datos transaccional que ocupa una porción pequeña de datos en memoria, por esto mismo es perfecto para dispositivos mobiles.

En este articulo explicare las sentencias básicas para insertar y modificar datos así como también creación, conexión y des-conexión y veremos como podemos comprobar que todo funciona correctamente.

Al final del tutorial encontraremos el código fuente para descargar.

Creando nuesta base de datos

Lo primero que tenemos que hacer es crear una Clase que nos administre nuesta DB. Esta clase tendra tareas como crear, insertar y borrar registros etc..
El primer paso sera entonces crear una clase que herede de SQLiteOpenHelper .

Esta clase nos proveerá los métodos que luego sobrescribiremos para manejar nuestra DB:

onCreate(SQLiteDatabase db): Se invoca cuando creamos nuestra base de datos, crea las tablas y columnas, vistas y triggers.

onUpgrade(SQLiteDatabse db, int oldVersion, int newVersion): Se invoca cuando creamos una modificacion a la base de datos como alter o dropping, ademas de crear nuevas tablas.

Bien explicado esto pasamos a nuestro ejemplo.
Nosotros vamos a crear una base de datos muy sencilla llamada BDAgenda, con una sóla tabla llamada Agenda que contendrá sólo dos campos: nombre , apellido y telefono. Para ellos, vamos a crear una clase derivada de SQLiteOpenHelper que llamaremos AgendaSqlite, donde sobrescribiremos los métodos onCreate() y onUpgrade() para adaptarlos a la estructura de datos indicada.

——————————————————————————–
public class AgendaSqlite extends SQLiteOpenHelper {

//Sentencia para crear la tabla de Usuarios
String sqlCreate = "CREATE TABLE Agenda (codigo INTEGER, nombre TEXT, apellido TEXT, telefono TEXT)";
public AgendaSqlite(Context context, String name, CursorFactory factory,int version) {
super(context, name, factory, version);

}

@Override
public void onCreate(SQLiteDatabase db) {
//Se ejecuta la sentencia SQL de creación de la tabla
db.execSQL(sqlCreate);
}


@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// En la practica deberemos migrar datos de la tabla antigua
// a la nueva, por lo que este método debería ser más elaborado.
//Eliminamos la versión anterior de la tabla
db.execSQL("DROP TABLE IF EXISTS Usuarios");
//y luego creamos la nueva
db.execSQL(sqlCreate);
}
}

—————————————————————————–

Dentro de nuestra clase el método onCreate() se ejecutara únicamente cuando sea necesario, en nuestro caso cuando para la creación de la base de datos, osea cuando la misma no exista. Ademas deben ejecutarse las tareas de inicializacion como la inserción de datos iniciales, si es que son necesarios.

Vemos también que nuestra clase tiene un constructor con los siguientes argumentos
context, name, factory, version.

context: El contexto de trabajo.
name: El nombre de nuestra base de datos.
CursorFactory: En este caso es null.
Version: La versión de nuestra DB. Cuando la versión es diferente el motor genera una nueva DB en blanco.

Posteriormente en nuestra Activity llamaremos a AgendaSqlite para instanciar un objeto de dicha clase.
Con nuestro objeto creado usamos el metodo getReadableDatabase() o getWritableDatabase() para obtener una referencia a la base de datos, dependiendo si sólo necesitamos consultar los datos o también necesitamos realizar modificaciones, respectivamente.

—————————————————————————–

public class SqlitedemoActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//Abrimos la base de datos 'Agenda' en modo escritura
AgendaSqlite usdbh = new AgendaSqlite(this, "Agenda", null, 1);
SQLiteDatabase db = usdbh.getWritableDatabase();

if(db != null)
{
//Insertamos 5 usuarios de ejemplo
for(int i=1; i<6; i++) {
//Generamos los datos
int codigo = i;
String nombre = "Usuario" + i;
String apellido = "Apellido" + i;
String telefono = "0000" + i;
//Inserta los datos en la tabla Usuarios
db.execSQL("INSERT INTO Agenda (codigo, nombre,apellido,telefono) " +
"VALUES (" + codigo + ", '" +
nombre +"','" +
apellido +"','" +
telefono +"'" +
")");
}
//por ultimo cerramos la base de datos
db.close();
}
     }
}

———————————————————————

Si todo sale bien corremos nuestra aplicacion y se creara nuestra base de datos dentro de la siguiente ubicacion.

/data/data/exequielc.sqlitedemo/databases/Agenda

Para comprobar esto podemos hacer lo siguiente. Una vez ejecutada por primera vez desde Eclipse la aplicación de ejemplo sobre el emulador de Android (y por supuesto antes de cerrarlo) podemos ir a la perspectiva “DDMS” (Dalvik Debug Monitor Server) de Eclipse y en la solapa “File Explorer” podremos acceder al sistema de archivos del emulador, donde podremos buscar la ruta indicada de la base de datos. Podemos ver esto en la siguiente imagen (click para ampliar):

Para visualizar la base de datos podemos descargar el siguiente aplicativo gratuito desde la siguiente ubicacion.
http://sqliteadmin.orbmu2k.de/
Una ves descargado, la ejecutamos y procedemos a abrir nuestro archivo(“Agenda”) generado recientemente.

Bueno espero que les sea util este breve ejemplo,
lo pueden descargar desde aquí.

Saludos!!

Trabajando con fechas en java

Trabajar con fechas en java no es para nada complicado, pero puede llegar a confundirnos si tomamos en cuenta la cantidad de formas que java nos ofrece para hacerlo.

En este articulo explicare brevemente como utilizar las funciones mas comunes y un breve ejemplo/proyecto en Android aplicando lo antes explicado.

Las clases java.util.Date y java.sql.Date. Son las clases mas usadas para el trabajo con fechas.

java.util.Date: La clase java.util.Date representa un instante de tiempo específico, con precisión de milisegundos.

java.util.Date utilDate = new java.util.Date();
System.out.println(“java.util.Date: ” + utilDate);

  • El año “y” está representado por un entero igual a (“y” – 1900). Por ejemplo el año 2004 se representa como 104 (2004 – 1900).
  • Los meses son representados por números entre 0 y 11, donde enero es 0 y diciembre es 11.
  • Los días y minutos se representan de forma corriente. Entre 1 – 31 y 0 – 59 respectivamente.
  • Las horas van entre 0 y 23, donde la medianoche es 0 y el medio día 12.
  • Los segundos van entre 0 y 61. (el 61 solo en casos excepcionales)Si necesitamos obtener el año el mes el dia la hora,minuto o segudo necesitaremos llamar a la clase java.util.Calendar para que nos provea de dicha informacion.

java.sql.Date: Esta clase hereda de java.util.Date y se instancia pasándole un tipo de dato long a su constructor.

java.sql.Date sqlDate = new java.sql.Date(utilDate.getTime());
System.out.println(“java.sql.Date.: ” + sqlDate);

Pero tambien podemos aplicar la forma inversa de la siguiente manera:
java.util.Date utilDate2 = new java.util.Date(sqlDate.getTime());

Creando nuestro proyecto en Android.

Es muy simple, nuestro codigo  consiste en  un TimePicker en donde seteamos una hora y un EditText donde adicionaremos un numero para agregar “tiempo al tiempo”

Primero definimos las variables que luego utilizaremos

private int mYear;
private int mMonth;
private int mDay;
private int mHour;
private int mMinute;
private TextView tv_resultado;
private EditText ed_duration;
private TimePicker tp_time;
private Button btn_calcular;
static final int TIME_DIALOG_ID = 0;
private java.util.Date utilDate;

y obtenemos todos los elementos de nuestro xml

tv_resultado = (TextView) findViewById(R.id.tv_resultado);
ed_duration = (EditText) findViewById(R.id.ed_duration);
tp_time = (TimePicker)findViewById(R.id.tm_time);
btn_calcular = (Button)findViewById(R.id.btn_calcular);

Instanciamos un objeto desde la clase Calendar y extraemos la fecha hora actual.
final Calendar c = Calendar.getInstance();
mYear = c.get(Calendar.YEAR);
mMonth = c.get(Calendar.MONTH);
mDay = c.get(Calendar.DAY_OF_MONTH);
mHour = c.get(Calendar.HOUR_OF_DAY);
mMinute = c.get(Calendar.MINUTE);

Luego en el evento click del botón aplicamos el proceso de calculo.

Creamos un objeto de tipo java.util.Date pasandole la fecha hora antes obtenida.

utilDate = new java.util.Date(mYear, mMonth, mDay, mHour, mMinute);

usamos utilDate.getTime() para calcular nuestro tiempo previamente definido.

long d = utilDate.getTime() + duration * 60 * 1000;

Convertimos a fecha nuestro resultado

Date resDate = new Date(d);

Y finalmente mostramos el objeto fecha formateado usando SimpleDateFormat
SimpleDateFormat formatter = new SimpleDateFormat(“dd/MM/yy HH:mm”);

tv_resultado.setText(formatter.format(resDate));

Dejo el fuente del codigo para descargar..desde aquí.

Espero que les sirva..Saludos!!