Android

Aplicaciones Android.

iPhone

Aplicaciones iPhone/iPad.

HTML5

Aplicaciones moviles web en HTML5.
 

Recuperar Información de una lista cargada desde un JOIN

sábado, 4 de agosto de 2012

Este tip te puede mejorar el rendimiento de la aplicación pues lo que se busca es no volver a la persistencia por información, mi caso era que tenia una lista que se lleno con una consulta a la base de datos local y esta conformada con JOINs, por lo tanto al seleccionar la fila que deseaba no encontraba la información por medio del id de la fila pues esta asociado a otra tabla. El caso normal es 

@Override
protected void onListItemClick(ListView l,View v,int position,long id){
  String name = (String)getListAdapter().getItem(position).toString();

para mi caso requiero el id que relaciona un JOIN, y si ya se cargaron lo datos la primera vez que forme la lista, no deberia de volver a la base de datos local, por lo tanto puedes hacer esto

@Override
protected void onListItemClick(ListView l,View v,int position,long id){
  int n = 2; //posicion de id en el select
SQLiteCursor cursorJoin=(SQLiteCursor)getListAdapter().getItem(position);
  long idPerson = cursorJoin.getString(n);

donde la n es la posicion del valor que requiero en del siguiente Select
SELECT cliente._id, cliente.name, persona.idPersona,..................
FROM cliente
INNER JOIN persona ON cliente.code=persona.code

Paso de Objetos por Intents

domingo, 22 de julio de 2012

Realizar el paso de objetos, es tal como se pasan otros tipos de datos por medio de los Intent.
El siguiente codigo se coloca en el Activity1 que realiza el llamado al Activity2, pasandole una instancia del objeto MyObject.


Intent i = new Intent(this, Activity2.class);
i.putExtra(ID, object);
startActivity(i);

Ya sobre el Activity2 se recupera por medio del getSerializable()

MyObject recibir = (MyObject)extras.getSerializable(MyObject.ID);




Cambiar de SDK un proyecto Android

domingo, 6 de mayo de 2012

Este procedimiento puede ser sencillo pero mas de una vez se olvida. Sucede que tenemos un proyecto en una version y lo necesitamos cambiar. Clic derecho sobre el proyecto Propiedades y aca vamos a la rama de Android, a la derecha podremos cambiar el SDK del proyecto, recuerda hacer las modificaciones en el Manifest y Clean al proyecto si este lo requiere.


Hacer que un activity se vea como un Pop-up

sábado, 5 de mayo de 2012

Cada vez quedo mas sorprendido con las facilidades que tiene Android para programar, en este caso tengo un activity que deseo que se vea como un Dialog o pop-up, y lo unico que se debe hacer es agregarle un Theme al activity, esto se hace sobre el Mainfest.xml

<activity android:theme="@android:style/Theme.Dialog">

UnsupportedOperationException cuando no se implementa un metodo

domingo, 29 de abril de 2012

Generalmente cuando se hereda se debe implementar los metodos, si por algun motivo no se va a implementar alguno recuerden la buena practica de poner un Exception como este.

throw new UnsupportedOperationException();

Porque en el Manifest los Activities y Providers tienen punto(.)

sábado, 28 de abril de 2012

Cuando se agrega en el Manifest un Activity o un Provider, nos recomiendan ponerle punto al comienzo, así
<provider android:name=".Provider"
<activity android:name=".Activity"
Esto indica que la clase se encuentra dentro del namespace.

Problema para instalar el ADT plugin en Eclipse

miércoles, 18 de abril de 2012

Sucede que al tratar de instalar el ADT sobre Eclipse Indigo, me salia el siguiente error, el cual no me permitia continuar con la instalación.
Missing requirement: Android Development Tools
Para esto entonces se debe de instalar el plugin de WSE que se encuentra en el repositorio del eclipse, en la imagen se puede ver el repositorio al que se debe conectar y seleccionar el WSE Server Adapter, una vez instalado, reinicia el Eclipse, y ahora si puedes volver a intertar instalar el ADT.

Llenar un List de forma mas rapida

miércoles, 4 de abril de 2012

Esta es la manera clasica de llenar una lista

        List<String> arrayString = new ArrayList<String>();
        arrayString.add("father");
        arrayString.add("mother");
        arrayString.add("sister");
        arrayString.add("pet");


Este forma se encuentra disponible desde SDK 1.5 por la introduccion de los parameters args.
List<String> arrayString = Arrays.asList("father", "mother", "sister", "pet");

XMLAdapters Ejemplo de Android con fallo

sábado, 25 de febrero de 2012

El XMLAdapters es un ejemplo muy bueno de la mejora que se hizo en Android para realizar el parser de los archivos XML, este cambio esta desde Android 3.0 (Honeycomb). El problema es que al tratar de probarlo te encuentras con un error, lo cual lo hace pensar que uno tiene algo desconfigurado o cualquier otra cosa menos que el ejemplo viene con un error, pero así es.

La solución es modificar el manifest y cambiar la linea del provider.

<provider android:name="com.example.android.xmladapters.XmlDocumentProvider"
                  android:authorities="xmldocument" />

Manipular base de datos SQLite de app Android

viernes, 24 de febrero de 2012

SQLite Manager es una herramienta que les sera de gran utilidad a la hora de crear, monitorear y manipular sus bases de datos en dispositivos móviles, aunque no solo para ellos pues también esta siendo utilizada en los browser y otros.

Tan solo tienen que tener instalado Firefox ir al menú Herramientas>Complementos pasar a la ficha extensiones y buscar el SQLite Manager, descargarlo, reiniciar el Firefox y ya lo encontraran en el menú Herramientas>SQLiteManager. Una vez abierto pueden cargar o crear un archivo sqlite y manipularlo




Como sacar nuestra base de datos de la aplicación Android
Cuando lancen la aplicación ya sea sobre el emulador o sobre el dispositivo (desde luego que conectado), sobre su Eclipse pasan a la perspectiva DDMS y en la ficha FileExplorer en el directorio data>data>tu.paquete>databases>data, una vez estén sobre el archivo en la parte superior derecha encontraran el botón con un disquete que les permite guardar el archivo en un directorio de tu maquina, y listo, ya puedes cargarlo sobre el SQLite.



Referencias
http://code.google.com/p/sqlite-manager/

Porque algunas variables en Android comienzan con 'm'

Es común y a la vez curioso en un principio, encontrar que en los ejemplos de Android algunas variables comenzaran siempre con 'm', la razón es que esto esta especificado en la guía de codificación de Android.


Por lo tanto ellos recomiendan que para la variables 'member' se les coloque una m al principio, eso quiere decir que las variables privadas y protegidas que se utilizaran dentro de la clase llevaran la m. Y las que no deben de llevar nada al comienzo las denominan 'local' osea las que estén dentro de un método o son son publicas en la clase.


Acá les coloco la parte de la guía donde explican el resto de convenciones para las variable, un ejemplo 


Follow Field Naming Conventions

  • Non-public, non-static field names start with m.
  • Static field names start with s.
  • Other fields start with a lower case letter.
  • Public static final fields (constants) are ALL_CAPS_WITH_UNDERSCORES.
For example:
public class MyClass {
    public static final int SOME_CONSTANT = 42;
    public int publicField;
    private static MyClass sSingleton;
    int mPackagePrivate;
    private int mPrivate;
    protected int mProtected;
}
Fuentes
http://source.android.com/source/code-style.html#follow-field-naming-conventions

http://developer.android.com/resources/tutorials/notepad/notepad-ex2.html

http://stackoverflow.com/questions/2092098/why-most-of-android-tutorials-variables-start-with-m

query() vs rawQuery()

Estos dos metodos de SQLiteDatabase, realizan la misma funcion de traer los datos al realizar un SELECT, pero su diferencia esta en el rendimiento y en la construccion del query.
Utiliza rawQuery(), cuando tengas un Select directo.
constantsCursor
= db.rawQuery("SELECT _ID, title, value " + "FROM constants ORDER BY title", null);

Utiliza query() cuando tienes en Select variable donde sus parametros pueden cambiar y puedes aprovechar para pasarlos en el array de String. mDb.query(DATABASE_TABLE, new String[] {KEY_ROWID, KEY_TITLE,
                KEY_BODY}, null, null, null, null, null);

nullColumnHack parametro en SQLiteDatabase.insert()

jueves, 23 de febrero de 2012

Sì el parametro nullColumnHack se pasa en null quiere decir que todos los campos deben de ser NOT NULL
private static final String DATABASE_CREATE =
        "create table notes (_id integer primary key autoincrement, "
        + "title text not null, body text not null);";
mDb.insert(DATABASE_TABLE, null, initialValues);


Pero si se desea permitir que alguno de ellos sea null entonces, solo se requiere pasar el nombre de alguna de la las columnas que permitira ser null, no se debe poner todas, solo una.
db.execSQL("CREATE TABLE constants (_id INTEGER PRIMARY KEY AUTOINCREMENT, title TEXT, value REAL);");
db.insert("constants", TITLE, cv);

Lorem

Please note: Delete this widget in your dashboard. This is just a widget example.

Ipsum

Please note: Delete this widget in your dashboard. This is just a widget example.

Dolor

Please note: Delete this widget in your dashboard. This is just a widget example.