Monday, June 3, 2013

Validar el formato de un E-mail en Android

Se puede hacer con el siguiente método:

public static boolean isEmailValid(String email) {
    boolean isValid = false;

    String expression = "^[\\w\\.-]+@([\\w\\-]+\\.)+[A-Z]{2,4}$";
    CharSequence inputStr = email;

    Pattern pattern = Pattern.compile(expression, Pattern.CASE_INSENSITIVE);
    Matcher matcher = pattern.matcher(inputStr);
    if (matcher.matches()) {
        isValid = true;
    }
    return isValid;
}

Gracias a la expresión regular indicada arriba, el método devolverá true si el formato es válido y false en caso contrario.

fuente

Bookmark and Share

Thursday, May 30, 2013

Android: Mostrar un mensaje cuando el ListView está vacío

Si se está usando el ListView, existe un método que se llama setEmptyView el cual recibe un view y se muestra cuando la lista está vacía. Aquí un ejemplo:

Primero se debe agregar un View (como un botón o un texto) al Layout de la actividad donde tienen el ListView. Aquí un ejemplo con un texto:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <ListView
        android:id="@+id/myListView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" >
    </ListView>
    <TextView
        android:id="@+id/emptyListView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:visibility="gone"
        android:text="@string/emptyList" >
    </TextView>

</LinearLayout>
Es importante que tenga el atributo android:visibility="gone" para que no se muestre cuando la lista si tenga contenido.

Luego en la clase donde utlizan el ListView, deberán llamar al método setEmptyView y entregarle el TextView que creamos en el xml

ListView lv = getListView();
lv.setEmptyView(findViewById(R.id.emptyListView));
o bien

ListView lv = (ListView)findViewById(R.id.myListView);
lv.setEmptyView(findViewById(R.id.emptyListView));


Bookmark and Share

Tuesday, May 28, 2013

Cambiar la zona horaria del servidor Heroku

Es muy fácil cambiar la zona horaria de Heroku:


  1. Deben obtener la zona horaria que quieren configurar de este link. Ahí deben escoger el texto bajo la columna "TZ"
  2. En su consola local, deben correr el comando: heroku config:add TZ=America/Santiago

Y listo, su servidor se reiniciará una vez finalizada la configuración.

Para revisar que el cambio se haya realizado de forma satisfactoria deben iniciar la consola de heroku desde su consola local (heroku run console) y luego escribir el comando Time.now  ahí se les imprimirá la hora.


Bookmark and Share

Tuesday, May 21, 2013

AFNetworking: Leer una respuesta XML en una aplicación para iPhone, con XCode

Con AFNetworking es muy fácil leer respuestas en XML o JSON que entregue un servidor.
Aquí un ejemplo con XML:

Primero deben bajar el AFNetworking a su computador desde el link:

https://github.com/AFNetworking/AFNetworking

Una vez descargada, descomprime la carpeta. Ahora contaras con una carpeta con un nombre similar (o igual) a: AFNetworking-AFNetworking-211cdfc

Ahora anda a XCode, selecciona tu proyecto, anda a Archivo y haz clic en la opción "Agregar archivo a <nombre_de_tu_proyecto>". Ahi busquen la carpeta AFNetworking-AFNetworking-211cdfc, ábranla y seleccionen la carpeta AFNetworking que está adentro.

Ya estás listo para empezar a conectarte con tu servidor.

Para empezar debes agregar los archivos al encabezado:

#import "AFXMLRequestOperation.h"
#import "AFHTTPClient.h"

Luego debes iniciar la comunicación con el servidor y obtener el XML.


        //Supongamos que deseamos enviar el mail y contraseña a nuestro servidor para obtener una respuesta cuando un usuario intenta iniciar sesión.
NSString *email = [self.txtUsername text];
        NSString *contrasena = [self.txtPassword text];
//Crea un NSDictonary con los parámetros
        NSDictionary *params = [NSDictionary dictionaryWithObjectsAndKeys:
                                email, @"email",
                                contrasena, @"contrasena",
                                nil];
        
//Indica la url de tu servidor
        NSURL *url = [[NSURL alloc] initWithString:@"http://www.miservidor.com"];
        AFHTTPClient *httpClient = [[AFHTTPClient alloc] initWithBaseURL:url];
        [httpClient registerHTTPOperationClass:[AFXMLRequestOperation class]];
        [httpClient setDefaultHeader:@"Accept" value:@"application/xml"];
        //Indica donde se debe hacer la petición
NSMutableURLRequest *request1 = [httpClient requestWithMethod:@"POST" path:@"/iniciar_sesion" parameters:params];
        AFXMLRequestOperation *operation = [AFXMLRequestOperation XMLParserRequestOperationWithRequest:request1 success:^(NSURLRequest *request, NSHTTPURLResponse *response, NSXMLParser *XMLParser) {
            
            XMLParser.delegate = self;

//Aquí leemos la respuesta del XML
            [XMLParser parse];
        } failure:nil];

//Aquí iniciamos la llamada
        [operation start];

Ahora falta crear las funciones para parsear el archivo XML, esto se puede lograr de diferentes maneras. Aquí muestro una:
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qualifiedName attributes:(NSDictionary *)attributeDict{
    self.currentElement = [elementName copy];
    self.ElementValue = [[NSMutableString alloc] init];
    
//Ejemplo de lectura
    if ([elementName isEqualToString:@"algun-campo"]) {    
       // hacer algo, ejemplo imprimir un mensaje...
    }
}
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string{
    [self.ElementValue appendString:string];
}
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName
  namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName {
    if([elementName isEqualToString:@"algun-campo"]){
    //hacer alguna acción, por ejemplo:
    NSLog(self.ElementValue);   
    }
}

Cualquier cosa dejen un comentario!



Bookmark and Share

Configura la tipografía de tu aplicación Android

Android permite configurar la tipografía a gusto del desarrollador. Hay que tener en cuenta que existen tipografías que son pesadas y también algunas que requieren una licencia o permiso para poder utilizarlas.

Primero, parte con crear una carpeta llamada Fonts bajo la Carpeta res.
Agrega la tipografía que deseas usar a esa carpeta, este puede ser .otf o .ttf (puede que existan otros formatos que se puedan utilizar).

Lamentablemente, Android ya no permite configurar la tipografía a través del xml y se debe hacer en tiempo de ejecución y en cada uno de los elementos.

Por ejemplo, para un TextView. Primero, ubica el TextView que deseas configurar:


TextView tv = (TextView) findViewById(R.id.miTV);


Luego configura la tipografía:


Typeface tf = Typeface.createFromAsset(getAssets(), "fonts/algunatipografia.ttf");


Configura la tipografía del TextView:


tv.setTypeface(tf);


Bookmark and Share

Thursday, May 9, 2013

Reiniciar posición de ScrollView en Android

ScrollView incorpora 2 funciones para reinicar la posición en la que se encuentra un ScrollView.

fullscroll(int direction)  recibe un entero que indica la dirección hacia donde realizar el un scroll completo.

scrollTo(int x, int y) recibe la posición x e y a donde se desea mover el scroller.

Por ejemplo si se desea mover hasta el inicio:

ScrollView sv = (ScrollView) findViewById(R.id.tu_scrollview);
sv.scrollTo(0,0);


Bookmark and Share

Thursday, March 28, 2013

Actualizando a Rhodes 3.5.1

Un poco tarde vengo a escribir de esto, pero para aquellos que no saben, hace unos meses atrás salió la versión de Rhodes 3.5.1

Para actualizar la versión en Windows:

gem install rhodes (o gem update rhodes) 

rhodes-setup (o copiar rhobuild.yml desde la gema rhodes vieja) 
cd <a-tu-aplicación-de-rhodes> migrate-rhodes-app

Ahora el instalador RhoStudio para Windows y Mac son parte de RhoElements v2.x


Bookmark and Share

Tuesday, March 26, 2013

Error H10 al hacer deploy en Heroku

Segunda vez que hago el deploy de una aplicación en Heroku y me vuelve a salir el mismo problema:

at=error code=H10 desc="App crashed" method=GET path=/ host=nombre-de-mi-app.herokuapp.com fwd="190.21.126.160" dyno= connect= service= status=503 bytes=

at=error code=H10 desc="App crashed" method=GET path=/favicon.ico host=timepoints.herokuapp.com fwd="190.21.126.51" dyno= connect= service= status=503 bytes=

Intenté las siguientes cosas y mi problema se solucionó:

En stackoverflow sugerían lo siguiente:

heroku run rake db:migrate

pero eso no me solucionó el problema (inicialmente al menos), lo que había que fijarse bien es que el archivo database.yml esté bien configurado para el ambiente de producción.

En particular, lo que tuve que editar fue el nombre del usuario de la base de datos, lo dejé en root y me aseguré que el nombre de la base de datos esté toda en minúsculas y en el formato: nombreapp_production.

Ejemplo:


production:
  adapter: postgresql
  encoding: unicode
  database: nombreapp_production
  pool: 5
  username: root
  password:


y fijarse de cualquier otro error que pueda estar surgiendo de alguna clase que se está subiendo también puede solucionar el problema.


Bookmark and Share

Wednesday, February 20, 2013

Ventana se abre fuera de la pantalla en Windows7

Es muy común que pase que se mueve una ventana y luego el programa abre todas las ventanas fuera de la pantalla y no se puede ver nada.

Para esto Windows tiene una función Mover o Move en todas las ventanas abiertas.


Como acceder a este menú si no puedes ver la ventana? Muy sencillo, debes seleccionar el programa en la barra de tareas y luego presionar Alt + barra espaciadora. Luego presionando la letra M se seleccionará la opción mover y a continuación con el uso de las flechitas puedes posicionar la ventana en la pantalla para verla nuevamente.


Bookmark and Share

Saturday, February 16, 2013

Función Smart Cover iPad, Nexus 7 y Kindle Paperwhite

Nunca indagué sobre los smart covers (funda inteligente) hasta hoy que tuve un "problema" con mi Nexus 7. Inicialmente pensaba que era un lindo nombre para la funda, pero resultó que realmente hay una función "smart" (inteligente).

Resulta que los dispositivos iPad 3, Nexus 7 y Kindle Paperwhite tienen un sensor magnético para que éstos se prendan o apaguen automáticamente cuando se abra o cierre la tapa de la funda (si es que esta es inteligente y tiene un imán por supuesto). Suena bastante cómodo, pero existe un problema el cual aun no tengo bien claro si es problema de la funda o del dispositivo: los aparatos se apagan cuando colocas la tapa por atrás.

El iPad 3 cuenta con una opción dentro de la configuración para deshabilitar esta función, lamentablemente no es el caso del Nexus 7 (hasta donde he averiguado) y tampoco del Kindle Paperwhite (confirmado por la atención al cliente de Amazon)

Soluciones sugeridas para este problema? Sacar el imán de la funda en el área donde está el sensor o colocar un pedazo de acero.

Si tienen más info al respecto escríbanlo en los comentarios!


Bookmark and Share

Thursday, January 10, 2013

Ver archivos HTML en GitHub

Con GitHub además de mantener tu código en un lugar seguro  y crear un ambiente colaborativo puedes usarlo para mostrar páginas HTML y hacer pruebas.

Para esto debes anteponer lo siguiente antes de la URL del archivo HTML en cuestión:

http://htmlpreview.github.com/?

ejemplo:

http://htmlpreview.github.com/?https://github.com/marimaf/CodeTests/blob/master/showHtml.html



Bookmark and Share

Related Posts Plugin for WordPress, Blogger...