Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - Cronos

#21
No entiendo, tu quieres una pagina como codeacademy para aprender a programar android o quieres una pagina para el celular?
#22
Wargames y retos / Re:RETO XSS [Facil]
Febrero 22, 2015, 10:39:36 AM
Te mande la url por privado!
Gracias por el reto
Saludos,, Cronos.-
#23
Desarrollo móvil / Buenas practicas con Bitmap
Febrero 17, 2015, 11:57:46 AM
Buenas practicas con Bitmap

Cargando grandes mapas de bits de manera eficiente
Muchas veces tratamos de cargar una imagen de tamaño muy grande en un espacio muy pequeño, y esto funciona, pero no de la manera que esperamos. Al crear un listView con una colección de Bitmap mal implementado, nos daremos cuenta que al deslizar nuestra lista, esta se torna pesada y torpe. Esto es por el tamaño de las imágenes que hemos cargado en cada Bitmap.
Por ejemplo, no vale la pena cargar una imagen de 1024x768 píxeles en la memoria si se mostrará en una miniatura de 128x96 píxeles en un imageView. La mejor practica para evitar esto es reducir el tamaño de imagen que se va a crear en el Bitmap al que se calcula que uno va a usar. Para esto utilizamos la opción inSampleSize, esta opción lo que hace es indica la escala que se utilizara para reducir dicha imagen. Por ejemplo, una imagen con resolución 2048x1536 que se cargara con un inSampleSize de 4 produce un mapa de bits de aproximadamente 512x384, cargando esto en memoria utiliza 0.75MB en lugar de 12 MB para la imagen completa.
Una pregunta común es, como saber que valor al inSampleSize debo colocar? Pues hay un método para calcular dicho tamaño de manera automática, que es el siguiente.

Código: text

public static int calculateInSampleSize(
            BitmapFactory.Options options, int reqWidth, int reqHeight) {
    final int height = options.outHeight;
    final int width = options.outWidth;
    int inSampleSize = 1;
    if (height > reqHeight || width > reqWidth) {
        final int halfHeight = height / 2;
        final int halfWidth = width / 2;
        while ((halfHeight / inSampleSize) > reqHeight
                && (halfWidth / inSampleSize) > reqWidth) {
            inSampleSize *= 2;
        }
    }
    return inSampleSize;
}


Este método recibe como parámetros el elemento options que utilizaremos para crear nuestro Bitmap, el Width y Height que deseamos que tenga nuestro Bitmap y devuelve un valor de tipo int el cual sera nuestro valor a colocar en inSampleSize para obtener este tamaño deseado.
Para utilizar este método, primero debemos decodificar con la opción inJustDecodeBounds establecida en true, se pasan el options y luego decodificar de nuevo usando el nuevo valor de  inSampleSize y inJustDecodeBounds establecido esta ves en false.

Código: text

public static Bitmap decodeSampledBitmapFromResource(Resources res, int resId,
        int reqWidth, int reqHeight) {
    // First decode with inJustDecodeBounds=true to check dimensions
    final BitmapFactory.Options options = new BitmapFactory.Options();
    options.inJustDecodeBounds = true;
    BitmapFactory.decodeResource(res, resId, options);
    // Calculate inSampleSize
    options.inSampleSize = calculateInSampleSize(options, reqWidth, reqHeight);
    // Decode bitmap with inSampleSize set
    options.inJustDecodeBounds = false;
    return BitmapFactory.decodeResource(res, resId, options);
}


Este método hace que sea fácil de cargar un mapa de bits de tamaño arbitrariamente grande en un ImageView que muestra una miniatura de 100x100 píxeles, como se muestra en el siguiente código de ejemplo:

Código: text

mImageView.setImageBitmap(
    decodeSampledBitmapFromResource(getResources(), R.id.myimage, 100, 100));


Ahora bien una ves implementado esto en el caso que dijimos anteriormente se puede notar una gran diferente la fluidez al desplazar nuestra lista, pero esto no queda acá. Las personas que no nos conformamos con poco notaremos que aun la lista de desplaza con cierto retraso que no es nada agradable a la vista. Esto sucede porque cada ves que deslizamos y mostramos los items ocultos en la lista se vuelve a calcular y a cargar la imagen en los Bitmap y todo este proceso se produce en el hilo principal, lo cual tenemos que evitar, entonces el siguiente paso es hacer este proceso de cargado en un hilo secundario, para ello utilizaremos AsyncTask.

Procesando Bitmap en un hilo secundario
La clase AsyncTask proporciona una manera fácil de ejecutar algún trabajo en un subproceso de fondo y publicar los resultados de vuelta en el subproceso de interfaz de usuario. Para usarlo, se crea una subclase y se sobrescriben los métodos proporcionados. Un ejemplo de la carga de una imagen de gran tamaño en un imageView usando AsyncTask y el método creado anteriormente  decodeSampledBitmapFromResource ():

Código: text

class BitmapWorkerTask extends AsyncTask<Integer, Void, Bitmap> {
    private final WeakReference<ImageView> imageViewReference;
    private int data = 0;
    public BitmapWorkerTask(ImageView imageView) {
        // Use a WeakReference to ensure the ImageView can be garbage collected
        imageViewReference = new WeakReference<ImageView>(imageView);
    }
    // Decode image in background.
    @Override
    protected Bitmap doInBackground(Integer... params) {
        data = params[0];
        return decodeSampledBitmapFromResource(getResources(), data, 100, 100));
    }
    // Once complete, see if ImageView is still around and set bitmap.
    @Override
    protected void onPostExecute(Bitmap bitmap) {
        if (imageViewReference != null && bitmap != null) {
            final ImageView imageView = imageViewReference.get();
            if (imageView != null) {
                imageView.setImageBitmap(bitmap);
            }
        }
    }
}


Podemos observar que el constructor recibe un imageView el cual sera el que utilizaremos para cargar el Bitmap, el método doInBackground() ejecuta el método decodeSampledBitmapFromResource() en segundo plano y retorna un Bitmap el cual lo va a recibir el método onPostExecute() el cual se encargar de plasmar los resultados en la interfaz principal.
Para comenzar a cargar el mapa de bits de forma asíncrona, basta con crear una nueva tarea y ejecutarlo:

Código: text

public void loadBitmap(int resId, ImageView imageView) {
    BitmapWorkerTask task = new BitmapWorkerTask(imageView);
    task.execute(resId);
}


Observamos que la ejecutar la tarea en segundo plano se le pasa una variable resId, el cual es el id con la ruta de la imagen a cagar.

Almacenando un Bitmap en cache
Al ver los resultados que nos arroja el paso anterior podemos observar que el deslizamiento de nuestra lista es muy veloz, pero que tiene un pequeño problema. Las imágenes tardan en cargarse, y esto es algo esperado ya que el proceso de cargar los item de la lista en el hilo principal no van a esperar ah que termine el proceso en el hilo secundario, entonces se formara una desincronización a la hora de cargar los datos de cada item, por mas que simplemente sean microsegundos, esto es algo que se nota notablemente en la UI e irritaría mucho al usuario.
Entonces como solucionamos este problema? Cargando cada Bitmap en cache.
Una memoria caché ofrece un acceso rápido a los Bitmap a costa de ocupar memoria valiosa de la aplicación. La clase LruCache esta especialmente adecuado para la tarea de Bitmap en caché.
Con el fin de elegir un tamaño adecuado para el LruCache, un número de factores deben ser tomados en consideración, por ejemplo:

-  ¿Cuántas imágenes estará en pantalla a la vez? ¿Cuántos tienen que estar disponibles listos para entrar en la pantalla?
-  ¿Cuál es el tamaño de la pantalla y la densidad del dispositivo? Un dispositivo de alta densidad (xhdpi) como Galaxy Nexus tendrá un caché más grande para mantener el mismo número de imágenes en la memoria en comparación con un dispositivo como Nexus S (IPAP).
-  ¿Con qué frecuencia se accederá a las imágenes? ¿Algunos acceder con mayor frecuencia que los demás? Si es así, tal vez usted puede querer mantener ciertos artículos siempre en la memoria o incluso tener varios objetos LruCache para diferentes grupos de mapas de bits.
-  ¿Puede equilibrar la calidad contra cantidad? A veces puede ser más útil para almacenar un mayor número de Bitmap de menor calidad.

No hay un tamaño específico o fórmula que se adapte a todas las aplicaciones, es cuestión de cada uno analizar su consumo y llegar a una solución adecuada. Una caché que es demasiado pequeña causa sobrecarga adicional sin ningún beneficio, una memoria caché que es demasiado grande  puede devolver excepciones java.lang.OutOfMemory y dejar al resto de su aplicación poca memoria para trabajar. Un ejemplo de la creación de un LruCache para Bitmap:

Código: text

private LruCache<String, Bitmap> mMemoryCache;
@Override
protected void onCreate(Bundle savedInstanceState) {
    ...
    // Get max available VM memory, exceeding this amount will throw an
    // OutOfMemory exception. Stored in kilobytes as LruCache takes an
    // int in its constructor.
    final int maxMemory = (int) (Runtime.getRuntime().maxMemory() / 1024);
    // Use 1/8th of the available memory for this memory cache.
    final int cacheSize = maxMemory / 8;
    mMemoryCache = new LruCache<String, Bitmap>(cacheSize) {
        @Override
        protected int sizeOf(String key, Bitmap bitmap) {
            // The cache size will be measured in kilobytes rather than
            // number of items.
            return bitmap.getByteCount() / 1024;
        }
    };
    ...
}
public void addBitmapToMemoryCache(String key, Bitmap bitmap) {
    if (getBitmapFromMemCache(key) == null) {
        mMemoryCache.put(key, bitmap);
    }
}
public Bitmap getBitmapFromMemCache(String key) {
    return mMemoryCache.get(key);
}


Ahora cuando vallamos a cargar un Bitmap en un imageView, primero comprobaremos que este Bitmap no esta ya cargado en cache. En caso de que este en cache, evitaremos todo el proceso de redimensionamiento echo anteriormente y simplemente lo traeremos de la cache, caso contrario haremos los pasos mencionados anteriormente y almacenaremos ese Bitmap en cache si no existe, para que la próxima ves que tengamos que cargarlo, lo traigamos de cache.

Código: text

public void loadBitmap(int resId, ImageView imageView) {
    final String imageKey = String.valueOf(resId);
    final Bitmap bitmap = getBitmapFromMemCache(imageKey);
    if (bitmap != null) {
        mImageView.setImageBitmap(bitmap);
    } else {
        mImageView.setImageResource(R.drawable.image_placeholder);
        BitmapWorkerTask task = new BitmapWorkerTask(mImageView);
        task.execute(resId);
    }
}


En la clase BitmapWorkerTask creada anteriormente solo debemos agregar la linea de código que se encarga de cargar este nuevo Bitmap en cache.

Código: text

class BitmapWorkerTask extends AsyncTask<Integer, Void, Bitmap> {
    ...
    // Decode image in background.
    @Override
    protected Bitmap doInBackground(Integer... params) {
        final Bitmap bitmap = decodeSampledBitmapFromResource(
                getResources(), params[0], 100, 100));
        addBitmapToMemoryCache(String.valueOf(params[0]), bitmap);
        return bitmap;
    }
    ...
}


Y eso seria todo. Ya tenemos una lista que carga por única vez los Bitmap y luego hace petición a cache, la eficiencia de esto es muy grande y los resultados son muy notorios.
Para realizar este manual me base en la información oficial de Google la cual colocare a continuación.

No tienes permitido ver enlaces. Registrate o Entra a tu cuenta
No tienes permitido ver enlaces. Registrate o Entra a tu cuenta
No tienes permitido ver enlaces. Registrate o Entra a tu cuenta

Autor: Leandro Vitale

Saludos,, Cronos.-
#24
Presentaciones y cumpleaños / Re:Hola Underc0de!!
Febrero 07, 2015, 12:13:18 PM
Jaja hasta que te presentaste chanta! A ver cuando veo un aporte tuyo pero del nivel que tenes, no esos simples sqli
Abrazo bro y 'bienvenido'
Saludos,, Cronos.-
#25
Buenos días ahora les dejo la versión avanzada del libro!
Sinceramente yo no lo he leído ya que me eh ido perfeccionando en Android con Google, pero de todos modos es un libro para recomendar.



Resumen del libro
El libro que tiene en sus manos es una guía para aquellos programadores de Android que, teniendo nociones básicas, quieran profundizar en algunos aspectos de especial interés. Diseño avanzado del interfaz de usuario: Aprenda todas las novedades incorporadas en las últimas versiones de Android, como Fragments, ActionBar, bar ra de búsquedas, animación de propiedades...Personalice sus propias vistas y cree Widgets de escritorio. Hilos de ejecución: En Android esimprescindible dominar el uso de threads. Use AsyncTask y programe animaciones gráficas con SurfaceView. Bluetooth: Saque provecho a esta tecnología para interconectar dos dispositivos Android, o un dispositivo Android con un PC. Servicios en la nube: Utilice en sus aplicaciones las notificaciones Push, almacenamiento en la nube con Google Drive y el servicio de Backup de Google. Aplicaciones Web: Aprenda a integrar una aplicación basada en HTML5, CSS3 y JavaScript dentro de Android. Conozca las alternativas a la programación multiplataforma para móviles. Programación en código nativo: Use NDK para escribir directamente sus algoritmos en C/C++ y compílelos a código nativo del procesador. Redes sociales: Integre Facebook y Twitter en sus aplicaciones. Ingeniería inversa: Aprenda a jaquear aplicaciones para evitar que lo hagan con las suyas. Estudie el código y modifique aplicaciones de terceros. Ofusque el código e incluya licencias de Google Play. El libro propone un aprendizaje activo, con actividades, muchas a través de Internet: - poli[Media]Videos elaborados por los autores. -Ejercicio paso a paso: La mejor forma de aprender es practicando. -Práctica: Para afianzar lo aprendido hay que practicar. -Recursos adicionales: Localice rápidamente la información clave -Preguntas de repaso y reflexión: ¿Lo ha entendido todo correctamente

No tienes permitido ver enlaces. Registrate o Entra a tu cuenta

Saludos,, Cronos.-
#26
Les dejo este libro, el cual fue uno de los que utilice para iniciarme en la programación de aplicaciones nativas. Es un gran libro y sirve mucho para iniciarse! Espero que les sirva



El Gran Libro de Android, Tomás Gironés, Jesús (Segunda Edición)
PDF | Spanish | 116 MB | Tomas Girones, Jesus | Editorial: MARCOMBO, S.A. | ISBN: 8426718329 | Páginas: 404 | Edición: 2ª | 1 de mayo de 2012

Contenido:

    Lista de acrónimos
    ¿Cómo leer este libro?
    CAPÍTULO 1. Visión general y entorno de desarrollo 21
    1.1. ¿Qué hace que Android sea especial? . 22
    1.2. Los orígenes . 23
    1.3. Comparativa con otras plataformas 24
    1.4. Arquitectura de Android. 26
    1.4.1. El núcleo Linux 27
    1.4.2. Runtime de Android . 27
    1.4.3. Librerías nativas 28
    1.4.4. Entorno de aplicación 28
    1.4.5. Aplicaciones 29
    1.5. Instalación del entorno de desarrollo 29
    1.5.1. Instalación de los componentes por separado 30
    1.5.1.1. Instalación de la máquina virtual Java . 30
    1.5.1.2. Instalación de Eclipse . 30
    1.5.1.3. Instalar Android SDK de Google 31
    1.5.2. Instalación del plug-in Android para Eclipse (ADT) . 35
    1.5.3. Instalación con MOTODEV Studio 36
    1.6. Las versiones de Android y niveles de API . 38
    1.6.1. Android 1.0 Nivel de API 1 (septiembre 2008) 39
    1.6.2. Android 1.1 Nivel de API 2 (febrero 2009) 39
    1.6.3. Android 1.5 Nivel de API 3 (abril 2009, Cupcake) . 39
    1.6.4. Android 1.6 Nivel de API 4 (diciembre 2009, Donut) . 39
    1.6.5. Android 2.0 Nivel de API 5 (octubre 2009, Éclair) . 40
    1.6.6. Android 2.1 Nivel de API 7 (enero 2010, Éclair) 40
    1.6.7. Android 2.2 Nivel de API 8 (mayo 2010, Froyo) 40
    1.6.8. Android 2.3 Nivel de API 9 (diciembre 2010, Gingerbread) 41
    1.6.9. Android 3.0 Nivel de API 11 (febrero 2011, Honeycomb) . 41
    1.6.10. Android 3.1 Nivel de API 12 (mayo 2011) 42viii
    1.6.11. Android 3.2 Nivel de API 13 (julio 2011) . 42
    1.6.12. Android 4.0 Nivel de API 14 (octubre 2011, Ice Cream Sandwich) 43
    1.6.13. Android 4.0.3 Nivel de API 15 (diciembre 2011) 43
    1.6.14. Elección de la plataforma de desarrollo . 43
    1.7. Creación de un primer programa 45
    1.7.1. Creación del proyecto 45
    1.8. Ejecución del programa. 49
    1.8.1. Ejecución en el emulador 49
    1.8.2. Ejecución en un terminal real 49
    1.9. Elementos de un proyecto Android . 51
    1.10. Componentes de una aplicación . 53
    1.10.1. Vista (View) 53
    1.10.2. Layout 53
    1.10.3. Actividad (Activity) 54
    1.10.4. Servicio (Service) 54
    1.10.5. Intención (Intent) . 54
    1.10.6. Receptor de anuncios (Broadcast receiver) . 54
    1.10.7. Proveedores de Contenido (Content Provider) 55
    1.11. Documentación y ApiDemos . 55
    1.11.1. Donde encontrar documentación . 55
    1.11.2. La aplicación ApiDemos . 55
    1.12. Depurar 57
    1.12.1. Depurar con Eclipse . 57
    1.12.2. Depurar con mensajes Log. 58
    CAPÍTULO 2. Diseño de la interfaz de usuario: Vistas y Layouts 61
    2.1. Creación de una interfaz de usuario por código . 62
    2.2. Creación de una interfaz de usuario usando XML 63
    2.2.1. Edición visual de las vistas 66
    2.3. Layouts . 70
    2.4. Una aplicación de ejemplo: Asteroides . 76
    2.4.1. Recursos alternativos 78
    2.5. Estilos y temas . 82
    2.5.1. Los estilos . 83
    2.5.1.1. Heredar de un estilo propio . 83
    2.5.2. Los temas . 84
    2.6. Uso práctico de Vistas y Layouts 85
    2.6.1. Acceder y modificar las propiedades de las vistas por código 87
    2.7. Uso de TabLayout 89
    2.7.1. Uso de la etiqueta en Layouts 91
    CAPÍTULO 3. Actividades e Intenciones 93
    3.1. Creación de nuevas actividades . 94
    3.2. Comunicación entre actividades . 98
    3.3. Añadiendo un menú 100
    3.4. Creación y uso de iconos 102
    3.5. Añadiendo preferencias de usuario 105
    3.5.1. Organizando preferencias . 108
    3.5.2. Como se almacenan las preferencias de usuario . 109
    3.5.3. Accediendo a los valores de las preferencias . 110
    3.6. Añadiendo una lista de puntaciones en Asteroides 111
    3.7. La vista ListView . 113
    3.7.1. Un ListView que visualiza una lista de Strings 115
    3.7.2. Un ListView que visualiza Layouts personalizados . 116
    3.7.3. Un ListView con nuestro propio adaptador . 118
    3.7.4. Detectar una pulsación sobre un elemento de la lista . 120
    3.8. Las Intenciones 121
    3.8.1. La etiqueta . 126
    CAPÍTULO 4. Gráficos en Android 127
    4.1. Clases para gráficos en Android . 128
    4.1.1. Canvas 128
    4.1.2. Paint 130
    4.1.2.1. Definición de colores . 131
    4.1.3. Path 133
    4.1.4. Drawable . 135x
    4.1.4.1. BitmapDrawable 136
    4.1.4.2. GradienDrawable 137
    4.1.4.3. TransitionDrawable . 138
    4.1.4.4. ShapeDrawable 138
    4.1.4.5. AnimationDrawable . 139
    4.2. Creación de una vista en un fichero independiente 140
    4.3. Creando la actividad principal de Asteroides 143
    4.3.1. La clase Gráfico . 145
    4.3.2. La clase VistaJuego 146
    4.3.3. Introduciendo la nave en VistaJuego 148
    4.4. Representación de gráficos vectoriales en Asteroides . 150
    4.5. Animaciones . 152
    4.5.1. Animaciones Tween 153
    4.5.2. Animaciones de propiedades 156
    CAPÍTULO 5. Entradas en Android: teclado, pantalla táctil y sensores 157
    5.1. Manejando eventos de usuario . 158
    5.1.1. Escuchador de eventos . 158
    5.1.2. Manejadores de eventos . 159
    5.2. El teclado 159
    5.3. La pantalla táctil . 162
    5.3.1. Manejo de la pantalla táctil con multi-touch 165
    5.3.2. Manejo de la nave con la pantalla táctil 168
    5.4. Gestures . 169
    5.4.1. Creación y uso de una librería de gestures . 170
    5.4.2. Añadiendo gestures a Asteroides 174
    5.5. Los sensores 176
    5.5.1. Un programa que muestra los sensores disponibles
    y sus valores en tiempo real 181
    5.5.2. Utilización de los sensores en Asteroides . 183
    5.6. Uso de hilos de ejecución (Threads) . 184
    5.6.1. Introduciendo movimiento en Asteroides 185
    5.7. Introduciendo un misil en Asteroides 187
    CAPÍTULO 6. Multimedia y ciclo de vida de una actividad 191
    6.1. Ciclo de vida de una actividad 192
    6.1.1. ¿Qué proceso se elimina? . 198
    6.1.2. Guardando el estado de una actividad 200
    6.2. Utilizando multimedia en Android 202
    6.3. La vista VideoView 205
    6.4. La clase MediaPlayer 207
    6.4.1. Reproducción de audio con MediaPlayer 207
    6.5. Un reproductor multimedia pasó a paso . 208
    6.6. Introduciendo efectos de audio con SoundPool . 215
    6.7. Grabación de audio . 217
    CAPÍTULO 7. Seguridad y posicionamiento 223
    7.1. Los tres pilares de la seguridad en Android 224
    7.1.1. Usuario Linux y acceso a ficheros . 225
    7.1.2. El esquema de permisos en Android . 225
    7.1.3. Permisos definidos por el usuario en Android . 227
    7.2. Localización 231
    7.2.1. Emulación del GPS con Eclipse 236
    7.3. Google Maps 237
    7.3.1. Obtención de una clave Google Maps 237
    7.4. Fragmentando los asteroides 242
    CAPÍTULO 8. Servicios, notificaciones y receptores de anuncios 245
    8.1. Introducción a los servicios en Android . 246
    8.1.1. Ciclo de vida de un servicio. 247
    8.1.2. Permisos . 249
    8.2. Un servicio para ejecución en segundo plano. . 249
    8.2.1. Los métodos onStartCommad() y onStart() 252
    8.3. Las notificaciones de la barra de estado . 254
    8.3.1. Configurando tipos de avisos en las notificaciones . 257
    8.3.1.1. Asociar un sonido 257
    8.3.1.2. Añadiendo vibración . 257xii
    8.3.1.3. Añadiendo parpadeo de LED 257
    8.4. Receptores de anuncios 258
    8.4.1. Receptor de anuncios registrado en AndroidManifest.xml 259
    8.4.2. Arrancar un servicio tras cargar el sistema operativo . 265
    8.5. Un servicio como mecanismo de comunicación entre aplicaciones . 266
    8.5.1. Crear la interfaz en AIDL . 267
    8.5.2. Implementar la interfaz 268
    8.5.3. Publicar la interfaz en un servicio 269
    8.5.4. Llamar a una interfaz remoto . 270
    CAPÍTULO 9. Almacenamiento de datos 273
    9.1. Alternativas para guardar datos permanentemente en Android . 274
    9.2. Añadiendo puntuaciones en Asteroides 275
    9.3. Preferencias . 277
    9.4. Accediendo a ficheros . 280
    9.4.1. Sistema interno de ficheros . 281
    9.4.2. Sistema de almacenamiento externo 283
    9.4.2.1. Verificando acceso a la memoria externa 285
    9.4.2.2. Almacenando ficheros específicos de tu aplicación
    en el almacenamiento externo 286
    9.4.2.3. Almacenando ficheros compartidos en el almacenamiento externo 287
    9.4.3. Acceder a un fichero de los recursos 288
    9.5. Trabajando con XML . 289
    9.5.1. Procesando XML con SAX 290
    9.5.2. Procesando XML con DOM . 296
    9.6. Bases de datos . 301
    9.6.1. Los métodos query() y rawQuery() 304
    9.7. Utilizando la clase ContentProvider 305
    9.7.1. Conceptos básicos 306
    9.7.1.1. El modelo de datos . 306
    9.7.1.2. Las URI . 306
    9.7.2. Acceder a la información de un ContentProvider 307
    9.7.2.1. Leer información de un ContentProvider . 308
    9.7.2.2. Escribir información en un ContentProvider . 311
    9.7.2.3. Borrar y modificar elementos de un ContentProvider . 312
    9.7.3. Creación de un ContentProvider . 312
    9.7.3.1. Definir la estructura de almacenamiento del ContentProvider . 313
    9.7.3.2. Extendiendo la clase ContentProvider . 314
    9.7.3.3. Declarar el ContentProvider en AndroidManifest.xml 318
    9.7.4. Acceso a PuntuacionesProvider desde Asteroides . 319
    CAPÍTULO 10. Internet: sockets, HTTP y servicios web 321
    10.1. Comunicaciones en Internet mediante sockets 322
    10.1.1. La arquitectura cliente/servidor 322
    10.1.2. ¿Qué es un socket? 322
    10.1.2.1. Sockets stream (TCP) . 323
    10.1.2.2. Sockets datagram (UDP) . 323
    10.1.3. Un ejemplo de un cliente / servidor de ECHO 324
    10.1.4. Un servidor por sockets para las puntuaciones 326
    10.2. La web y el protocolo HTTP 330
    10.2.1. El protocolo HTTP 330
    10.2.2. Versión 1.0 del protocolo HTTP . 332
    10.2.3. Utilizando HTTP desde Android . 334
    10.3. Servicios web . 339
    10.3.1. Alternativas en los servicios web 339
    10.3.1.1. Servicios web basados en SOAP 340
    10.3.1.2. Servicios web basados en REST 341
    10.3.2. Acceso a servicios web de terceros 345
    10.3.3. Diseño e implantación de nuestro servicio web 349
    10.3.3.1. Instalación del servidor de servicios web 349
    10.3.3.2. Creación un servicio web en Eclipse 351
    10.3.3.3. Explorando el servicio web desde Eclipse 354
    10.3.3.4. Explorando el servicio web desde HTML 358
    10.3.3.5. Utilizando el servicio web desde Asteroides 360
    CAPÍTULO 11. Publicar Aplicaciones 365
    11.1. Preparar y testear tu aplicación 366
    11.1.1. Preparar la aplicación para distintos tipos de dispositivo 366
    11.1.2. Testear la aplicación 368
    11.2. Crear un certificado digital y firmar la aplicación 370
    11.3. Publicar la aplicación 372
    11.3.1. Publicar en Internet 372
    11.3.2. Publicar en Google Play Store 373
    11.4. Asteroides: detectar victoria y derrota 377
    ANEXO A. Referencia Java 379
    ANEXO B. Referencia: la clase View y sus descendientes 391

No tienes permitido ver enlaces. Registrate o Entra a tu cuenta
Fuente y contraseña: No tienes permitido ver enlaces. Registrate o Entra a tu cuenta

Saludos,, Cronos.-
#27
Y mira con Android Studio el diseño de aplicaciones es muy sencillo ya que es seleccionar y arrastrar, despues tocas un par de parametros y puedes hacer interfaces muy buenas.
Si realmente quieres aprender mas de android te recomiendo que primero instales Android Studio y luego veas los tutoriales en internet, en unas semanas ya dominas el ambiente.
Si tienes problemas al instalar el ambiente abre otro post con tus problemas y con gusto te ayudare.
Saludos,, Cronos.-
#28
Bien ya entendi, lo que tu quieres es una pantalla con una EditText y debajo un boton.
Lo unico que tienes que hacer es cambiar la etiqueta TextView por EditText. Te quedaria asi.

Código: text

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
                 android:layout_width="match_parent"
                 android:layout_height="match_parent"
                 android:orientation="vertical" >
        <EditText android:id="@+id/et_text"
                 android:layout_width="wrap_content"
                 android:layout_height="wrap_content"
                 android:hint="Hello, I am a EditText" />
        <Button android:id="@+id/btn_aceptar"
               android:layout_width="wrap_content"
               android:layout_height="wrap_content"
               android:text="Hello, I am a Button" />
    </LinearLayout>


Cualquier duda solo comenta!
Saludos,, Cronos.-
#29
Galería / Re:Regalo - Wallpaper Underc0de.
Enero 31, 2015, 11:21:53 AM
Lejos el mejor wallpaper de underc0de que eh visto.. Felicitaciones!
Saludos,, Cronos.-
#30
Ya lo solucione. Cuando me desocupe subo un tutorial de como hacerlo.
Saludos!
#31
Primero que nada usa Android Studio.
Segundo, veo que estas muy perdido en el tema de android, asique te recomiendo que veas tutoriales para iniciados. Ya que estas confundiendo muchos temas.
setLstAdapter se lo tienes que asignar a un elemento de dicho tipo. Y ahí no hay asignación.
Si me comentas que tratas de hacer, te tiro un codigo que funcione.
Saludos,, Cronos.-
#32
Dudas y pedidos generales / Re:duda sobre java
Enero 30, 2015, 02:04:03 PM
Es facil arriba estas declarando una variable de tipo 'int' y mas abajo con el (int) casteas ya que estas haciendo una divicion y estaria dando un float. Entonces para evitar una exception se castea asi se guarda del tipo correspondido.
#33
Buenos días, les vengo con una duda que me gustaría resolver.
Eh desarrollado una lista exactamente igual como la de Whatsapp, y mi problema es que las imágenes que muestra cada chat pesa igual que la imagen original y esto hace que cuando hay 4 chat en la lista que quieren mostrar la imagen, la app colapsa del peso de las imagenes. Tengo que reducir el tamaño de la imagen y la calidad así las imágenes son livianas y no afecten al funcionamiento de la app. Alguno sabe el como implementar esto?
Todo comentario es valido y agradecido.
PD: Estoy programando en android nativo.
Saludos,, Cronos.-
#34
Genial! Buenísimo materia, justo en una semana rindo la materia base de datos y uno de los temas es normalizacon. Me viene al pelo!
Saludos,, Cronos.-
#35
Muchas gracias por tu opinión y creo que si tienes razón al decir que si es bidireccional esta no puede disminuir el tamaña de la cadena.
Saludos,, Cronos.-
#36
Muchas gracias por sus respuestas!
#37
Claro esa es la otra opción. Pero me evito crearlo si ya existe algún método parecido.
De todos modos, si no me convence ninguno tendré que codificar uno yo :)
Saludos y Gracias,, Cronos.-
#38
Hola, les vengo a pedir su opinión con la siguiente duda.
Ando buscando un método que me ayude a encryptar y desencryptar una cantidad de información extensa.
La idea es disminuir caracteres, es decir de una cadena con 100 caracteres, genere una cadena de 20, 30 caracteres (mientras menos mejor).
Pensé en MD5, pero es unidireccional y tengo que generar un historial y toda la historia para luego obtener lo que dice. Pero no es la idea. Sino que sea un método que encrypte, desencrypte y disminuya la cantidad de caracteres sin necesidad de tener que almacenarlo en una db.
Si alguien conoce un método que cumpla mas o menos con estas características por favor coméntelo.
Saludos y Gracias,, Cronos.-
#39
Dudas y pedidos generales / Re:Problema con estilos
Octubre 12, 2014, 05:37:20 PM
Gracias por responder, pero la solucion que me pasaste Alexander no me funciono, no noto ningun cambio :/

Esta esto es lo que tengo en el css:

Código: text

nav#segundo{
float: left;
width: 18%;
height: 548px;
background: #F4F4F4;
    border-right: 1px solid #7C7C7C;
    border-left: 1px solid #7C7C7C;
}
nav#segundo ul#menulateral{
margin: 0px;
padding: 0px;
list-style-type: none;
}
nav#segundo ul#menulateral li{
margin-left: 10px;
padding-top: 5px;
padding-bottom: 2px;
padding-left: 30px;
}
nav#segundo ul#menulateral li#items:hover{
background-color: #5FACCC;
}
nav#segundo ul#menulateral li#personas{
margin-left: 10px;
padding-top: 5px;
padding-bottom: 2px;
padding-left: 10px;
font-weight: bold;
display:inline-block;
}
input.color5{
display:inline-block;
}


Saludos,, Cronos.-
#40
Dudas y pedidos generales / Problema con estilos
Octubre 10, 2014, 02:44:17 PM
Buenos dias hoy les traigo una duda que espero solucionar.
Estoy trabajando con listas y lo que quiero hacer es que en cada item aparezca un nombre y al lado una tableta de colores que se despliega cuando toco en el input.
Mi problema es el siguiente, en el item sale el nombre y debajo el input, nose como eliminar este salto de linea. Si alguien puede ayudarme. La idea es que el input quede al lado.

Codigo:
Código: text

<ul id="menulateral">
    <li id="colores">- Colores:</li>
    <li id="items" onclick="#">Color 1<input class="color5" type="text" name="color5" value="#FF00FF" /></li>
    <li id="items" onclick="#">Color 2<input class="color5" type="text" name="color5" value="#FF00FF" /></li>
    <li id="items" onclick="#">Color 3<input class="color5" type="text" name="color5" value="#FF00FF" /></li>
    <li id="items" onclick="#">Color 4<input class="color5" type="text" name="color5" value="#FF00FF" /></li>
</ul>


Como me queda:


Desde ya muchas gracias!
Saludos,, Cronos.-