Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


Android ¿Es posible definir un mapa en un archivo XML?

Estaba tratando de definir una tabla hash estática que hace uso de los recursos, pero me quedé callado por la imposibilidad de acceder a los recursos de forma estática.

Entonces me di cuenta de que lo mejor de todos los lugares para definir un mapa estático está en los propios archivos de recursos.

¿Cómo puedo definir un mapa en XML? Creo que si es posible debería ser similar al mecanismo Listpreference, con entradas y valores de entrada.

  • Exportación de una base de datos SQLite a un archivo XML en Android
  • Solicitud HTTP para archivo XML
  • No se puede activar el modo de vista previa Android Studio
  • Centrar un botón en un diseño Lineal
  • Post datos UTF-8 codificados en el servidor pierde ciertos caracteres
  • Creación de hashmap / map desde recursos XML
  • AdView - Falta de adActivity con android: configChanges en AndroidManifest.xml
  • Android: Ripple de fondo mediante programación
  • 4 Solutions collect form web for “Android ¿Es posible definir un mapa en un archivo XML?”

    ¿Cómo puedo definir un mapa en XML?

    <thisIsMyMap> <entry key="foo">bar</entry> <entry key="goo">baz</entry> <!-- as many more as your heart desires --> </thisIsMyMap> 

    Ponga esto en res/xml/ , y cargarlo usando getResources().getXml() . Camina los eventos para crear un HashMap<String, String> .

    Una opción más simple sería utilizar dos matrices. Esto tiene la ventaja de no iterar el archivo xml de nuevo, utiliza menos código y su más directo para utilizar matrices de diferentes tipos.

     <string-array name="myvariablename_keys"> <item>key1</item> <item>key1</item> </string-array> <string-array name="myvariablename_values"> <item>value1</item> <item>value2</item> </string-array> 

    A continuación, su código java se vería así:

     String[] keys = this.getResources().getStringArray(R.array.myvariablename_keys); String[] values = this.getResources().getStringArray(R.array.myvariablename_values); LinkedHashMap<String,String> map = new LinkedHashMap<String,String>(); for (int i = 0; i < Math.min(keys.length, values.length); ++i) { map.put(keys[i], values[i]); } 

    Siempre puede incrustar json dentro de su archivo strings.xml:

    Res / values ​​/ strings.xml

     <string name="my_map">{"F":"FOO","B":"BAR"}</string> 

    Y dentro de su actividad, puede construir su mapa en el método onStart :

     private HashMap<String, String> myMap; @Override protected void onStart() { super.onStart(); myMap = new Gson().fromJson(getString(R.string.my_map), new TypeToken<HashMap<String, String>>(){}.getType()); } 

    Este código necesita el google-gson api para trabajar, puede hacerlo usando el construido en json api en el androide sdk.

    Y en cuanto al acceso estático al mapa, puede crear un método estático:

     private static HashMap<String, String> method(Context context) { HashMap<String, String> myMap = new Gson().fromJson(context.getString(R.string.serve_times), new TypeToken<HashMap<String, String>>(){}.getType()); retrun myMap; } 

    La respuesta correcta fue mencionada por CommonsWare anterior, pero como XML-parsing no es tan simple, como después de un analizador simple para este propósito:

     public static Map<String, String> getHashMapResource(Context context, int hashMapResId) { Map<String, String> map = new HashMap<>(); XmlResourceParser parser = context.getResources().getXml(hashMapResId); String key = null, value = null; try { int eventType = parser.getEventType(); while (eventType != XmlPullParser.END_DOCUMENT) { if (eventType == XmlPullParser.START_TAG) { if (parser.getName().equals("entry")) { key = parser.getAttributeValue(null, "key"); if (null == key) { parser.close(); return null; } } } else if (eventType == XmlPullParser.END_TAG) { if (parser.getName().equals("entry")) { map.put(key, value); key = null; value = null; } } else if (eventType == XmlPullParser.TEXT) { if (null != key) { value = parser.getText(); } } eventType = parser.next(); } } catch (Exception e) { e.printStackTrace(); return null; } return map; } 
    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.