Estaba tratando de definir una tabla hash estática que hace uso de los recursos, pero quedé bloqueado por la imposibilidad de acceder a los recursos estáticamente.
Luego me di cuenta de que lo mejor de todos los lugares para definir un mapa estático es en los propios archivos de recursos.
¿Cómo puedo definir un mapa en XML? Creo que, de ser posible, debería ser similar al mecanismo Listpreference, con entradas y valores de entradas.Android ¿Es posible definir un mapa en un archivo XML?
Respuesta
¿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>
poner esto en res/xml/
, y cargarlo usando getResources().getXml()
. Siga los eventos para crear un HashMap<String, String>
.
Esto no es lo que necesito. En realidad, lo es, la parte de la tabla en XML. Pero no puedo usar getResources() en el contexto estático donde quiero construir el mapa hash. – ilomambo
@ilomambo: Inicialice su mapa hash en 'onCreate()' de una subclase 'Application' personalizada. Eso se llama después de que se crea cualquier 'ContentProviders' que tengas, pero antes de que se ejecute cualquier otra cosa de tu aplicación. 'Application' es un' Context' y debería funcionar para analizar este XML. – CommonsWare
@CommonsWare Gracias por su respuesta, lo usaré.Necesito guardar un HashMap como un archivo XML, ¿cómo puedo hacer esto? Gracias. – VansFannel
Una opción más simple sería utilizar dos matrices. Esto tiene la ventaja de no repetir el archivo xml de nuevo, utiliza menos código y es más sencillo 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, el 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 se puede incrustar JSON dentro de su archivo strings.xml:
res/valores/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 la aplicación google-gson para funcionar, puede hacerlo utilizando la API incorporada en el sdk de Android.
y en cuanto a acceso a la asignación estática 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 mencionado por CommonsWare arriba, pero como XML-análisis no es tan simple, ya que después de un analizador simple para con este fin:
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;
}
mientras escribía, la respuesta correcta fue mencionada por Commonsware, era solo una adición. Pensé que no era útil copiar la respuesta de Commonsware nuevamente en mi respuesta – Christian
- 1. Android: ¿Es posible escalar un xml drawable?
- 2. ¿Es posible definir múltiples clases en un solo archivo .cpp?
- 3. Definir un mapa como constante en java
- 4. ¿Es posible definir un elemento raíz en un documento XML utilizando Schema?
- 5. ¿Es posible en Android definir constantes en XML que varían con la configuración?
- 6. ¿es posible iniciar un Fragmento oculto al definir su estado en el XML?
- 7. Guardar archivo XML en AS3 es posible
- 8. cómo crear un archivo xml en android
- 9. ¿Puedo definir un mapa cuya clave es una estructura?
- 10. ¿Es posible definir un método de extensión genérico en F #?
- 11. ¿Es posible definir un bloque con argumentos predeterminados en Ruby?
- 12. ¿Es posible definir un bloque con argumentos opcionales en Ruby?
- 13. Rieles: ¿Es posible definir el alcance nombrado en un módulo?
- 14. ¿Es posible definir un nuevo operador en Groovy?
- 15. ¿Es posible definir un tipo genérico Vector en Actionsctipt 3?
- 16. ¿Es posible extraer imágenes incrustadas en un archivo?
- 17. puedo definir texto de líneas medias en un archivo xml de diseño de Android
- 18. Cómo definir un mapa en un archivo YAML en Play! ¿marco de referencia?
- 19. ¿Es posible rotar un dibujo en la descripción xml?
- 20. ¿Es posible dividir una cadena en varias líneas en un archivo XML? ¿Si es así, cómo?
- 21. ¿Es posible crear un área de mapa html en porcentaje?
- 22. ¿Es posible trazar una imagen en un mapa con matplotlib?
- 23. ¿Cuál es la diferencia entre "? Android:" y "@android:" en un archivo xml de diseño de Android?
- 24. ¿Es posible definir un bloque como miembro de una clase?
- 25. ¿es posible visualizar un mapa de Google Earth INSIDE Excel?
- 26. Incluyendo un archivo XML en un archivo XML/XSL
- 27. ¿Es posible definir un método de operador de extensión?
- 28. ¿Cómo puedo definir el diseño de un fragmento desde XML?
- 29. La lectura de un archivo de texto o un archivo XML en Java Android
- 30. ¿Es posible definir una variable en ColdFusion?
cheque esta out..http:? //mobiforge.com/developing/story/using-google-maps-android dm_switcher = true – dreamcoder
¿puede usted darnos un ejemplo lo que le gustaría hacer exactamente? – Blehi
Blehi, quiero tener un mapa estático al que pueda acceder muchas veces desde cualquier clase. Me gustaría, idealmente, tener este aspecto: – ilomambo