Categoría: Trucos

ago
17

Sacar las imágenes de una base de datos SQLite que están en campos blob

Hace poco tuve que sacar de una base de datos en SQLite las imágenes que estaban puestas como campos blob. En un rato tenía hecho un script en Python que llevaba tiempo pensando en compartir por aquí y hoy me he decidido por fin a publicarlo.

No es nada del otro mundo, como veis en menos de 20 líneas está todo hecho, eso es una de las maravillas que tiene Python, "en pocas líneas hace grandes cosas".

En la base de datos la columna "0" era el identificador y en la columna "3" era el campo blob.

  1. from pysqlite2 import dbapi2 as sqlite
  2.  
  3. try:
  4. from sqlite import encode, decode
  5. except ImportError:
  6. import base64
  7. sqlite.encode = base64.encodestring
  8. sqlite.decode = base64.decodestring
  9. else:
  10. sqlite.encode = encode
  11. sqlite.decode = decode
  12.  
  13. con = sqlite.connect("basededatos.db")
  14. cursor = con.cursor()
  15.  
  16. cursor.execute('SELECT * FROM Tabla')
  17. for row in cursor:
  18. if not row[3] == "":
  19. binfile = open('image'+str(row[0])+'.jpg', 'wb')
  20. binfile.write(row[3])
  21.  
  22. con.close()
  23.  
ago
04

Como descargar la base de datos de tu aplicación Android

Esto sólo funciona en el caso que estemos trabajando en el emulador y supongo que en los teléfonos Android que tengan acceso a root también.

La idea es poder descargarnos la base de datos SQLite de nuestra aplicación para hacer un backup o comprobar que se están guardando los datos correctamente. Una vez descargada os recomiendo usar SQLiteBrowser para ver los datos.

Simplemente una vez lanzado el emulador desde Eclipse nos vamos a la perspectiva DMMS de Android y seleccionamos la pestaña "File Explorer". Allí podremos acceder a la estructura de directorios de nuestro teléfono (emulador en nuestro caso) y navegamos al directorio "/data/data" (no me he equivocado es el directorio "data" que se encuentra en "data" ;-)).

Al abrir ese directorio veremos muchas carpetas con el nombre de los paquetes de los programas que tenemos instalados en nuestro emulador, abrimos el de nuestro programa (por ejemplo en el caso de AndAndo es "com.javielinux.andando") y si nuestra aplicación usa alguna base de datos deberá tener un directorio llamado "databases". Ábrelo y verás la base datos (si usas Android DataFramework será el nombre que le pusiste en el tables.xml).

Para descargarlo lo seleccionas y pulsas en el botón que hay arriba a la derecha que se llama "Pull a file from the device". Ya puedes ver tus datos en SQLiteBrowser.

may
14

Renovar el certificado debug.keystore para trabajar con Android

Estas son las típicas cosas que te enteras cuando te pasan. Resulta que después de un año usando Android en mi equipo hoy me ha dicho un mensaje como este

Error generating final archive: 
Debug certificate expired on X/X/XX X:XX

o lo que es lo mismo que mi certificado ha caducado. Para solucionarlo simplemente tienes que borrar el archivo "debug.keystore" que debes de tener en tu directorio ".android" (la localización la tienes en el apartado "Android" de las preferencias de Eclipse) y volver a generarlo. Para generarlo sólo escribe esto desde línea de comandos en el directorio:

keytool -genkey -keypass android -keystore debug.keystore 
-alias androiddebugkey -storepass android -validity 10000 
-dname "CN=Android Debug,O=Android,C=US"

Ahora tendrás activado tu certificado durante 10000 días más.

Categorías Android Trucos

Fuente: AndroidBook
abr
27

Quitando el molesto teclado al entrar en una actividad en Android

Teclado Activity

Si eres programador de Android seguro que te has encontrado alguna vez en esta situación. Resulta que cuando tienes un formulario en una actividad, al entrar en él y poner el foco en una caja de texto automáticamente aparece el teclado.

Esto puede ser molesto para la persona que está usando la aplicación. Después de muchos lamentos como mi amigo ignacio_gs para poder encontrar una solución, por fin la encontramos.

Como sabéis el elemento <activity> de AndroidManifest.xml tiene muchos parámetros y uno de ellos, exactamente android:windowSoftInputMode nos servirá para que no haga esto. Simplemente si pones stateHidden ya no aparecerá más el teclado.

<activity android:name="NombreActividad"
android:windowSoftInputMode="stateHidden"></activity>

Espero os sirva de ayuda.

Categorías Android Trucos
mar
18

¿Qué son las imágenes 9-patch en Android?

Una cosa que descubrí hace poco en Android y que me gustó mucho fueron los archivos 9-patch. Ahora que los he descubierto no sé como he podido vivir sin ellos. Este tipo de archivos permite la creación de imágenes de fondo o botones a medida. Lo más interesante es que se escalan automáticamente por el lugar que nosotros le queramos y esto hace que podamos usarlo en cantidad de ocasiones, sobretodo ahora que en Android tenemos muchos dispositivos con resoluciones de pantalla diferentes.

Vamos a ver un ejemplo.

A continuación vemos el archivo 9-patch.

Bocadillo 9-patch

Este archivo lo he cogido de los recursos del SDK de Android. Como podéis ver en los recursos del SDK hay muchos archivos que tienen esas líneas alrededor, todos ellos tiene extensión ".9.png" y son archivo 9-patch. ¿Para que sirven estas líneas?

La línea izquierda y superior determinan la zona de la imagen que se puede expandir. Fijaos como si proyectos esas líneas sobre la imagen nos dará la zona de la imagen que podrá expandirse, y que en ningún momento pasa por las esquinas de la imagen ni por el pico del bocadillo. A continuación podemos ver que es la parte rayada la que se puede expandir.

Bocadillo proyecccion 9-patch

La línea de la derecha y la de abajo no son obligatorias, aunque si recomendables, y determinan el padding (relleno) que tendrá el contenido de la imagen cuando la usemos como botón o como fondo.

Para entenderlo mejor veamos el siguiente ejemplo que he preparado.

Bocadillo proyecccion 9-path

Se ve claramente como funciona y lo fácil que es usarlo. Fijaos que el bocadillo siempre queda perfecto y ni los bordes redondeados ni el pico del bocadillo se deforman.

¿Cómo podemos crear nuestro propio 9-patch?

Primero crea la imagen con Gimp (puedes usar Photoshop o cualquier otro aunque son peores ;-)), luego carga la imagen en el programa "draw9patch" que tienes en el directorio "tools" del SDK.

Es en ese programa donde tendrás que pintar las líneas negras de 1 pixel que determinan el relleno y expansión del archivo 9-patch. Finalmente sólo tienes que guardar la imagen con extensión ".9.png".

Ya tienes preparada tu imagen. Sólo tienes que copiarla a los recursos del sistema y usarla como cualquier imagen dentro de tu programa, el sólo se encargará de expandirla y hacer el relleno.

¿Cómo he podido vivir sin esto hasta ahora?

Categorías Android Trucos
ene
21

Configurar el Nexus One en Ubuntu 9.10

Desde hace 1 semana soy propietario de un Nexus One, el famoso teléfono de Google. Realmente estoy impresionado con este aparato y cada vez que lo uso me gusta más.

El dispositivo en sí funciona perfectamente y se nota el procesador de 1GH que lleva. El diseño es muy bonito y con unos acabados muy conseguido, lo único que no hecho de menos de mi querido G1 es el teclado físico, y la verdad que lo hecho mucho de menos, y una de las cosas que más me gusta es que por fin puedo hacer fotografías decentes con el móvil, podéis ver aquí una comparativa de fotografías con el Milestone que hemos hecho en Geekool.

Y ahora a lo que vamos. Me acabo de poner a programar un rato y cual ha sido mi sorpresa cuando el driver no funciona. Si recordáis hace tiempo ya comentaba como instalar el driver en Ubuntu, pero en el Nexus hay que cambiar algo.

Increíblemente en la lista de dispositivos de Android Developer no aparece el Nexus (¿se habrán olvidado?) y el vendor id de HTC no funciona con el Nexus. Menos mal que he encontrado en una web que es el "18d1".

Simplemente crea un archivo llamado 51-android.rules (en versiones anteriores de Ubuntu era el 50-android.rules):

/etc/udev/rules.d/51-android.rules

Escribe en él lo siguiente:

SUBSYSTEM=="usb", SYSFS{idVendor}=="18d1", MODE="0666"

Y ya está. Recuerda que tienes que entrar también en el teléfono en "Ajustes > Aplicaciones > Desarrollo"  y marcar "Depuración USB", que yo no me acordaba y me he llevado un rato dándole vueltas.

Yo he tenido que reiniciar Ubuntu para que me funcionase.

Categorías Android Trucos Ubuntu