Inicialización personalizada de Spinner

En esta mini entrada comentaremos una forma de inicializar un Spinner en android con el valor que nosotros deseemos. Explicado de otra forma:
Nuestro Spinner contiene los días de la semana y por defecto nos mostrará «lunes», que será el valor en la posición 0 de nuestro componente, pero, ¿y si quisiéramos que apareciera otro de los valores?

Para ello vamos a crear un método que recibirá un string (el valor que queremos que se muestre), y nos devolverá el índice en el cual se encuentra esa cadena.

public class Utils {
	/**
	 * Metodo que recorre un spinner para buscar una cadena contenida en el.
	 * @param spinner
	 * @param myString
	 * @return Devuelve el indice correspondiende a la cadena
	 */
	public static int getIndexSpinner(Spinner spinner, String myString)
	{
		int index = 0;

		for (int i = 0; i < spinner.getCount(); i++) {
			if (spinner.getItemAtPosition(i).toString().equalsIgnoreCase(myString)) {
				index = i;
			}
		}
		return index;
	}
}

Ahora, para ver su funcionamiento, sólo tendríasmos que crear un spinner, darle valores e inicializarlo usando setSelection, al cual le pasaremos el índice optenido anteriormente.

    private Spinner spinnerSemana;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        spinnerSemana = (Spinner) findViewById(R.id.sp_semana);
        //Rellenar spinner con datos de ejemplo
        String[] valores = {"lunes","martes","miercoles","jueves","viernes","sábado", "domingo"};
        spinnerSemana.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, valores));
        
        //Seleccionar valor del spinner
        spinnerSemana.setSelection(Utils.getIndexSpinner(spinnerSemana, "jueves"));

    }

Código fuente

Leer json desde directorio raw en android

Cuando queremos leer json podemos hacerlo usando librerías como Gson pero en nuestro caso haremos uso de una clase de android llamada JsonReader (también está disponible JsonWriter)

Dicho archivo se ubicará en la carpeta /raw (/res/raw) que por defecto no viene creada pero podemos hacerlo sin problemas.

Una ventaja de usar un recurso desde esta carpeta en lugar desde assets es que android genera un ID para cada recurso, por lo que podemos acceder a él a través de la clase R.

Otra ventaja radica en que podemos crear carpetas para idiomas (raw-en) , con lo que crearíamos un archivo .json de datos en cada idioma y se cargaría el correspondiente en función del idioma del dispositivo igual que ocurre con el directorio value (value-en, value-fr etc.).

En este articulo vamos a hacer una lectura de un archivo .json propio desde la carpeta /raw y mostrar su contenido en un TextView, por lo que se necesitará:

Sigue leyendo

Listado de usuarios en una sala de socket.io

Cuando entramos a un chat, una de las partes fundamentales es ver la lista de usuarios, pues bien, en éste artículo vamos a capturar dichos usuarios que hay en una sala mediante socket.io.

Si nos vamos a la documentación (wiki), a la sección de manejo de rooms, podemos leer lo siguiente: If you want a list of clients in a particular room, call io.sockets.clients('room'). This will return Socket instances of all clients in the room.Sin embargo, no hay más información.

Pasamos al código y explicamos un poco:

var users = io.sockets.clients(socket.room);
var list_users = [];
		
users.forEach(function(client){			
	list_users.push(client.username);		
});

¿Por qué hacemos ésto?
La respuesta es sencilla. Nosotros queremos una lista de usuarios para posteriormente enviarla, por ejemplo con socket.broadcast.to(socket.room).emit(‘mi_funcion’, list_usuarios) y aquí nos encontramos el problema ya que io.sockets.clients(socket.room) nos devuelve un Object y eso no podemos enviarlo tal cual.

¿Solución?
Pues facil:
1º. Guardamos dicho Object en una variable.
2º. Creamos el array que será lo que enviemos.
3º. Recorremos el Objeto (users) para convertirlo en el array.

De esta forma tenemos un array con el listado de usuarios que podremos envíar al cliente

Enviar datos JSON de PHP a Node.js

En la siguiente entrada veremos como enviar datos desde PHP a un servidor Node.js. Los datos se enviarán mediante post en formato JSON y serán recogidos utilizando el framework Express.js.

PHP

  • Forma 1: haciendo uso de CURL.
        $url = 'http://localhost:4000';
        $data = array("nick" => 'CarmaZone', "twitter" => "@CarmaZone");

        $data_string = json_encode($data);

        $ch = curl_init($url);
        curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
        curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_HTTPHEADER, array(
            'Content-Type: application/json',
            'Content-Length: ' . strlen($data_string))
        );

        $result = curl_exec($ch);
        curl_close($ch);
  • Forma 2: usando uso de PHP  (PHP 4 >= 4.3.0, PHP 5)

Sigue leyendo

Crear y borrar objetos dentro de array

En javascript no existen arrays multidimensionales como en otros lenguajes, sin embargo se puede crear un array que contiene dentro más arrays o como el caso a tratar, hacer que un array contenga objetos.

En este ejemplo vamos a hacer uso del segundo y posteriormente hacer una busqueda de un objeto concreto y proceder a su eliminacion.

//Declarar un array
var usernames = [];

//Crear un objeto dentro del array: 
var u ={key: 1, nombre: "pepe"}

//Insertar el objeto en el array: 
usernames.push(u);

//Usamos JSON.stringify para imprimir un objeto por consola
console.log("Usuarios despues de guardar: " + JSON.stringify(usernames));

//Borrar un objeto concreto del array:
for (var i =0; i < usernames.length; i++){
   if (usernames[i].nombre === "pepe") {
      usernames.splice(i,1);
   }
}
console.log("Usuarios despues de borrar: " + JSON.stringify(usernames));

Con ésto obtendremos las siguientes salidas:
Usuarios despues de guardar: [{«key»:1, «nombre»:»pepe»}]
Usuarios despues de borrar: []

splice es el encargado de borrar el objeto encontrado:

1º parámetro: borrará el objeto de índice i.
2º parámetro: borra el nº de objetos, en nuestro caso solo 1.
un 3º parámetro opcional permite además añadir.

Enlaces de interés:

  • http://www.w3schools.com/jsref/jsref_splice.asp
  • http://www.w3schools.com/jsref/jsref_obj_array.asp
  • Comprobar EditText vacío

    En nuestra mini entrada de hoy vamos a explicar cómo comprobar si un EditText en android está vacío («»), aunque tiene poco que explicar xD.

    String precio= this.precio.getText().toString();
    
    if (precio.equals("")) {
         Toast.makeText(this, "Ha dejado campos vacios", 
                 Toast.LENGTH_LONG).show();
    }
    

    En lugar de .equals(«»), también podemos usar la librería de android «TextUtils»

    String precio= this.precio.getText().toString();
    
    if (TextUtils.isEmpty(precio_coste) {
         Toast.makeText(this, "Ha dejado campos vacios", 
                 Toast.LENGTH_LONG).show();
    }
    

    Instalación Windows desde USB

    Hoy vamos a dejar un breve artículos de cómo instalar windows desde un usb. ¿No os ha pasado nunca de tener que reinstalar un windows y vuestro ordenador no tiene lector cd/dvd?

    Pues con unos breves pasos lo conseguiremos.

    Herramientas necesarias:

    • Imagen iso de windows.
    • UltraISO (No importa que sea una demo).
    • USB de 4GB.

    Sigue leyendo

    TextBox solo números

    En esta pequeña entrada vamos a ver el código para que un componente del tipo TextBox de Visual Studio solo acepte números.

    Para ello crearemos el evento Key_Press del componente e introducimos el siguiente código:

            If e.KeyChar.IsDigit(e.KeyChar) Then
                 e.Handled = False
             ElseIf e.KeyChar.IsControl(e.KeyChar) Then
                 e.Handled = False
             Else
                 e.Handled = True
             End If
    

    por lo que nos quedará de ésta forma:

        Private Sub miTextBox_KeyPress(sender As Object, e As KeyPressEventArgs) Handles miTextBox.KeyPress
            If Char.IsDigit(e.KeyChar) Then
                e.Handled = False
            ElseIf Char.IsControl(e.KeyChar) Then
                e.Handled = False
            Else
                e.Handled = True
            End If
        End Sub
    

    Controles y eventos

    Para tener el código más ordenado, declararemos en nuestro código primero el control y posteriormente su manejador (listener), el cual escuchará el evento que ha realizado el usuario.

    Después crearemos el método de dicho evento que responderá según el control que lo ejecute.

    Tipos de listeners:

    onClick()

    Método de la interfaz View.OnClickListener. Se llama cuando el usuario selecciona un elemento. Se puede utilizar cualquier método como la pantalla táctil, las teclas de navegación o el trackball.

    onLongClick()

    Método de la interfaz View.OnLongClickListener. Se llama cuando el usuario selecciona un elemento durante más de un segundo.

    onFocusChange()

    Método de la interfaz View.OnFocusChangedListener. Se llama cuando el usuario navega dentro o fuera de un elemento.

    Sigue leyendo

    Android manifest

    Introducción

    Dentro de este tag encontramos los siguientes atributos.

    android:versionCode = “11 ″: Hace referencia al número de versión de desarrollo de nuestro programa, cada versión final que se desea publicar debe tener un versionCode distinto.

    android:versionName = “1.5.1″: Este es el número de versión de nuestro programa.

    package = “com.miaplicacion”: Es el paquete de nuestro programa y con el cual se referencia nuestra aplicación en el Android Market y el teléfono.

    Sigue leyendo