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

Related Posts Plugin for WordPress, Blogger...