Android

ANDROID
Municipios de España

openRawResource


En esta aplicación para android realizo una especie de base de datos que busca los municipios de España.
No estoy muy orgulloso de esta aplicación pero hace su función de enseñar como se utiliza datos insertados en la propia aplicación.
Estos datos de municipios se colocan en el directorio /res/raw ,y solo son de lectura. El fichero con la base de datos de municipios se llama municipios0.txt , debemos tener en cuenta que a la hora de utilizar los recursos internos, la extensión no se utiliza.
La base de datos la he pasado a mayúsculas y quitado los acentos. Lo he hecho debido a que la búsqueda es secuencial y lenta, además de que normalmente en los dispositivos android es lento añadir acentos y cambiar de minúsculas a mayúsculas.

Vamos a intentar explicar  este pequeño trozo de código de la función Fbuscar.
Lo primero es coger el texto del municipio a buscar y cambiarlo a mayúsculas .
             miclave=Mclave.getText().toString();       
             miclave=miclave.toUpperCase();
             Mclave.setText(miclave);  
Utilizamos try para manejar los error de abrir ficheros.
Abrimos el fichero y utilizamos un buffer para aumentar la velocidad de acceso al fichero.
            ISentrada=getResources().openRawResource(R.raw.municipios0);
            BFentrada=new BufferedReader(new InputStreamReader(ISentrada));
Leemos una por una todas las líneas del fichero.
Troceamos cada línea separando por el carácter ":" .
Si la segunda cadena que ha salido del troceo contiene la cadena a buscar miclave , se para la busqueda y se muestra.
            while ((Sentrada=BFentrada.readLine()) != null)
            {
            String SentradaT[]= Sentrada.split(":");
            if(SentradaT[2].contains(miclave))         {Mostrar(); break;}
            }
public void Fbuscar(View view)
    {        
        miclave=Mclave.getText().toString();       
        miclave=miclave.toUpperCase();
        Mclave.setText(miclave);     
        Contar();    
       
        try
        {
            if(ISentrada != null)    ISentrada.close();
            ISentrada=getResources().openRawResource(R.raw.municipios0);
            BFentrada=new BufferedReader(new InputStreamReader(ISentrada));
           
            while ((Sentrada=BFentrada.readLine()) != null)
            {
            String SentradaT[]= Sentrada.split(":");
            if(SentradaT[2].contains(miclave))         {Mostrar(); break;}
            }
           
        }
        catch (IOException e)
        {
            Log.e("Municipios->",e.getMessage(),e);
        }       
    }

Me hubiera gustado no tener que abrir y cerrar el fichero para volver a la posición inicial, pero no he encontrado la función seek(0) para recursos internos, no se si existe o no. Esto hace al programa poco eficiente, pero funciona bien :( .


PROGRAMA

Saludos
Juan Galaz


Bibliografía:
http://android.okhelp.cz/java_android_code.php?s=openRawResource
http://www.programmershare.com/1333689/

ANDROID 4: DESARROLLO DE APLICACIONES (En papel)
ISBN 9788441531970
WEI MENG LEE , ANAYA MULTIMEDIA, 2012

EL GRAN LIBRO DE ANDROID (3ª ED.) (En papel)
ISBN 9788426719768
JESUS TOMAS GIRONES , S.A. MARCOMBO, 2013