viernes, 23 de agosto de 2013

Verificar estado del WIFI en android

Este es un tipo de funcionalidad que es bueno tenerla en una clase de utilidades globales (en otras palabras, en un a clase de métodos estáticos).

Aveces es necesario conocer el estado del adaptador de red WIFI, para permitirle al usuario o a la misma aplicación realizar o no un proceso crítico del flujo de ejecución.

Como lo escribí arriba hagamos una clase de utilidades, como la siguiente:

import android.content.Context;

public class SystemUtils {   
    public static boolean isWifiOn(Context context) {
        ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo ni = cm.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
       
        if(!ni.isConnected()) return false; else return true;
    }
}

Nuestro método isWifiOn nos retornará un true si el WIFI está encendido; un false en caso contrario. Lo que nos permite implementar una acción dependiendo del caso en el que sea llamada la función, por ejemplo:

...

if(SystemUtils.isWifiOn(getApplicationContext()))
Toast.makeText(getApplicationContext(), "WIFI está encendido", Toast.LENGTH_LONG).show();
else
Toast.makeText(getApplicationContext(), "WIFI está apagado", Toast.LENGTH_LONG).show();
...

Noten que al ser un método estatico lo podemos llamar sin instanciar la clase SystemUtils; pues lo podemos acceder mediante un llamado directo.

Otro punto muy importante, antes de ejecutar tu aplicación asegurate de que en el AndroidManifest.xml le estás cediendo los permisos a la aplicación para que pueda verificar el estado del adaptador.

    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>

Espero les sirva, saludos!

miércoles, 8 de mayo de 2013

Android Unable to execute dex: Multiple dex files


Este es bastante sencillo de solucionar, sólo hay que LEER (lo entendí despues de una noche rompiendome la cabeza) en vez de GOOGLEAR.

En mi caso el mensaje era este:



[2013-05-07 23:08:21 - Dex Loader] Unable to execute dex: Multiple dex files define Lcom/sun/jersey/api/json/JSONConfigurated;
[2013-05-07 23:08:21 - smf-prototype] Conversion to Dalvik format failed: Unable to execute dex: Multiple dex files define Lcom/sun/jersey/api/json/JSONConfigurated;

Estoy trabajando en unos webservices que usan el soporte de JSon y para eso requiero un par de librerias.

La clave esta precisamente en el mensaje :  com/sun/jersey/api/json/JSONConfigurated

Al buscar entre las librerias que estaba usando para los asuntos de json (jersey-json-1.16.jar y jersey-bundle-1.17.jar) me dí cuenta que ambos JARs tienen la clase JSONConfigurated ubicada en el mismo paquete.



Solucion : eliminar una de las librerías o usar un bundle, como en mi caso. En realidad sin saber habia metido la otra libreria (jersey-json) y por eso me tiraba el error, pero he visto en muchos lados que a la gente les pasa lo mismo con otras librerias.
Algunos borran las Dependencias de Android del build path (funciona pero si usas cosas como anotaciones de Android no es nada agradable), otros le hacen un simple Clean al proyecto, pero realmente el problema es este, debemos tener cuidado y control de las librerias que estamos incluyendo en nuestro proyecto.

Un saludo! 

jueves, 8 de noviembre de 2012

Exports Oracle

Podemos exportar datos con Oracle utilizando esta secuancia de comandos; solo debes reemplazar los valores user, passwd, owner, file y log.
En este caso solo estamos exportando los objetos de un esquema en particular (owner).

exp user/passwd@sid owner=esquema file=nombre_archivo.dmp log=arch_log.log

Más info aquí: http://www.oracle-dba-online.com/export_and_import.htm

jueves, 21 de junio de 2012

Llamando Java desde C en Unix

Intente varias formas, al final me incline por hacer un script de UNIX y que este contenga la serie de configuraciones que requiere mi programa Java, desde un programa en C, llamaremos al Scritp y este llamará al porgrama Java.

Paso 1: Crear una clase

public class Hola
{
  public static void main(String []args)
  {
    System.out.println("I'm saying Helloooo!!!");
  }
}

Paso 2: Crear un Script (lo llamaremos "exe")

url=`which java`

$url Hola > salida

if [ $? -eq 0 ]
then
   echo 'El programa se ejecuto...'
else
   echo 'El programa no se ejecuto'
fi

more salida


Guardar (le puse "exe") y darle sus respectivos permisos de ejecucion (chmod +x exe)

Paso 3: Crear el programa en C

#include <stdlib.h>

int main(void)
{
   int result;
   result = system("exe");
}

Como vemos el programa en C ejecuta (con la funcion system ) el script exe, que es quien configura todo para que se ejecute nuestro programa java.

Compilar el java: javac Hola.java
Compilar el C: cc callJava.c (o el nombre que ustedes le pongan)

Salida:

userhome/user/ejemplo> a.out
El programa se ejecuto...
I'm saying Helloooo!!!
userhome/user/ejemplo>


martes, 10 de abril de 2012

ORA-01843: not a valid month

Si lo has intentado todo y nada te funciona, si revisas y revisas y todo esta bien... haz esto:
vete al regedit, en Software busca ORACLE, estando allí dale click a KEY_XE y según tu caso editaras el campo NLS_LANG.
Mi error se daba por esto:

    TO_DATE('1-Dec-2011 00:00:00','DD-MON-YYYY HH24:MI:SS')

Oracle no entendia el Dec (es que el mio no es gringo), el entiende Dic.
Puesto que en esa clave tenia este valor:

LATIN AMERICAN SPANISH_PANAMA.WE8MSWIN1252.

Para americanizarlo coloca en NLS_LANG esto:

AMERICAN_AMERICA.WE8ISO8859P1

y listo!

Crear PDF con Java, Netbeans y iText

Atención: Estoy suponiendo que tienes un conocimiento medio de Java y que usas fluidamente Netbeans. Gracias.

En un par de pasos vamos a crear un archivo PDF en JAVA

Materiales:
1. Libreria iText (http://sourceforge.net/projects/itext/files/iText/iText5.2.0/)
   Para este ejemplo use la version 5.2.0
2. Una pequeña imagen
   Para este ejemplo use una imagen en formato PNG, puede ser cualquiera
Deberás añadir las librerías de iText a tu proyecto, para que puedas hacer uso de las clase que se detallan aquí.
Teniendo todo esto vamos a crear nuestro archivo.
Vamos a crear una clase con cualquier nombre, en mi caso yo le pondré CreatePDF y dentro de ella voy a crear un método llamado writePDF. Tambien vamos
a colocarle un método main, el esqueleto quedaria así.

public class CreatePDF
{
    public void writePDF()
    {...}

    public static void main(String args[])
    {
        new CreatePDF().writePDF();
    }
}

Luego de esto lo primero que debemos hacer es importar los Objetos que vamos a utilizar, para nuestro básico ejemplo solo debemos añadir los
siguientes
          import com.itextpdf.text.BaseColor;
    import com.itextpdf.text.Chunk;
    import com.itextpdf.text.Document;
    import com.itextpdf.text.Font;
    import com.itextpdf.text.FontFactory;
    import com.itextpdf.text.Image;
    import com.itextpdf.text.PageSize;
    import com.itextpdf.text.Paragraph;
    import com.itextpdf.text.pdf.PdfWriter;
   
    public class CreatePDF ...

   
Ahora bien dentro del método writePDF() irá toda nuestra lógica para crear nuestro documento, vamos primero a crear un bloque try/catch y dentro de
él colocaremos las siguientes líneas; las cuales iré explicando paso a paso.

            Document document = new Document(PageSize.LETTER, 80, 80,              50, 50);
      FileOutputStream salida = new                        FileOutputStream("archivo.pdf");
      PdfWriter writer = PdfWriter.getInstance(document, salida);
      writer.setInitialLeading(0);


Como todo en Java debemos tener una instancia de un objeto antes de trabajar con el, por eso debemos tener una referencia a un objeto de tipo
Document que es quien representa nuestra hoja en blanco para escribir. Con el atributo PageSize.LETTER lo que le estamos indicando es que el
documento tendrá las dimesiones de un archivo en formato CARTA (si tambien hay para los demas estandares, investígalos), acompañando lo antes mencionado
esta el valor de los margenes de nuestro documento (margenIzq, margenDer, margenArriba, margenAbajo), pueden ser los valores que gustes compañero.
Con la línea del FileOutputStream únicamente estamos creando físicamente nuestro archivo en disco, allí iran todos nuestros cambios al documento.
Luego necesitamos tener una instancia de quien escribira nuestros cambios y darle su punto de inicio para que pueda escribir, (writer.setInitialLeading(0);).

Hecho todo esto solo nos queda ir "escribiendo" dentro de nuestro papel en blanco que ya hemos preparado, vamos a añadir dos párrafos sencillos juntos a
una imagen.

               Paragraph paragraph = new Paragraph();
      paragraph.add("Primera linea del documento");
      paragraph.setAlignment(Paragraph.ALIGN_CENTER);


Para escribir texto usamos la clase Paragraph, como ves tiene un metodo add en el que puedes escribir lo que desees...
esta clase tiene muchos métodos interesantes, como el que vemos aquí paragraph.setAlignment(Paragraph.ALIGN_CENTER) que como lo
adivinaste es para alinear en donde queramos.

            Image image = Image.getInstance("imagen.png");
           image.scaleToFit(150, 150);
           image.setAlignment(Chunk.ALIGN_CENTER);


Para colocar imégenes debemos instanciar un objeto de tipo Image, darle la ubicacion de nuestra imagen al constructor, darle el tamaño que
gustemos y alinearla.

            Paragraph paragraph_2 = new Paragraph();
            paragraph_2.setFont(new Font(FontFactory.getFont("Courier", 12, Font.BOLD, BaseColor.ORANGE)));
            paragraph_2.add("Ultima linea del documento");
            paragraph_2.setAlignment(Paragraph.ALIGN_LEFT);


En este parrafo lo unico que hemos hecho diferente es darle una fuente y color especifico a nuestro texto, hay otras formas de hacerlo
incluso si tienes fuentes extrañas instaladas en su carpeta Fonts de Windows puedes crear una nueva fuente a partir de esa, ya que por lo
general las fuentes "extrañas" no las reconoce, hagan la prueba y me comentan (si si si, tengo la solución si les llega a pasar..)

Antes de añadir todo nuestro contenido debemos abrir el documento para poder usarlo:
            document.open();
luego ir añadiendo en el orden en que queremos que aparezcan todos los checheres que hemos creado
               document.add(paragraph);
      document.add(image);
      document.add(paragraph_2);

y por logica... si abres algo, cierralo.
            document.close();

Eso es todo! Luego de que lo corras deberás tener en tu carpeta de proyecto tu archivo PDF.
Saludos, para dudas a la orden!!!