Stavo cercando di definire una tabella di hash statica che faccia uso di risorse, ma sono stato messo a tacere dall'impossibilità di accedere alle risorse staticamente.
Poi ho capito che il migliore di tutti i posti per definire una mappa statica è nei file delle risorse stessi.
Come definire una mappa in XML? Credo che, se possibile, dovrebbe essere simile al meccanismo Listpreference, con voci e valori-voci.Android È possibile definire una mappa in un file XML?
risposta
Come definire una mappa in XML?
<thisIsMyMap>
<entry key="foo">bar</entry>
<entry key="goo">baz</entry>
<!-- as many more as your heart desires -->
</thisIsMyMap>
mettere questo in res/xml/
, e caricarlo usando getResources().getXml()
. Passa gli eventi per creare un HashMap<String, String>
.
Questo non è ciò di cui ho bisogno. In realtà, è la parte della tabella in XML. Ma non posso usare getResources() nel contesto statico in cui voglio costruire la mappa hash. – ilomambo
@ilomambo: inizializza la tua mappa hash in 'onCreate()' di una sottoclasse 'Applicazione' personalizzata. Questo viene chiamato dopo che sono stati creati tutti i "ContentProviders", ma prima che venga eseguito qualsiasi altro aspetto della tua app. 'Application' è un' Context' e dovrebbe funzionare per analizzare questo XML. – CommonsWare
@CommonsWare Grazie per la tua risposta, la userò.Ho bisogno di salvare una HashMap come file XML, come posso fare questo? Grazie. – VansFannel
Un'opzione più semplice sarebbe utilizzare due array. Questo ha il vantaggio di non iterare nuovamente il file xml, usa meno codice ed è più semplice usare array di tipi diversi.
<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>
Allora il vostro codice Java sarebbe simile a questa:
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]);
}
È sempre possibile incorporare JSON dentro il file strings.xml:
res/valori/strings.xml
<string name="my_map">{"F":"FOO","B":"BAR"}</string>
E all'interno della tua attività, puoi costruire la tua mappa nel metodo 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());
}
Questo codice necessita di google-gson api per funzionare, è possibile farlo utilizzando l'API di json integrata nell'SDK di Android.
E per quanto riguarda l'accesso alla mappa in modo statico è possibile creare un metodo statico:
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 risposta corretta è stata menzionata da CommonsWare sopra, ma come XML-analisi non è così semplice, come a seguito di una semplice parser per questo scopo:
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;
}
come ho scritto la risposta corretta è stata citata da Commonsware, era solo un'aggiunta. Ho pensato che non è utile copiare nuovamente la risposta di Commonsware nella mia risposta – Christian
- 1. è possibile definire il testo con il lato centrale in un file xml di layout Android
- 2. È possibile creare un layout XML alveare in Android?
- 3. È possibile definire più classi in un solo file .cpp?
- 4. Ho creato una chiave API Mappa Android per V2, non è possibile visualizzare una mappa
- 5. Come definire una mappa in swagger?
- 6. Posso definire una mappa la cui chiave è una struttura?
- 7. È possibile definire una funzione locale in una query TSQL?
- 8. È possibile definire un blocco come membro di una classe?
- 9. È possibile definire un operatore senza %%?
- 10. In OCaml, è possibile definire la mappa in termini di Set?
- 11. Come definire una mappa in un file YAML in Play! struttura?
- 12. TSQL - È possibile definire l'ordinamento?
- 13. È possibile definire una variabile locale del costruttore in Scala?
- 14. Perché è possibile definire una funzione in un'altra funzione?
- 15. È possibile creare questa semplice forma in Android XML?
- 16. possibile definire una matrice in Sass?
- 17. E 'possibile creare un VectorDrawable da File System (* .xml File)
- 18. È possibile definire le costanti in css?
- 19. È possibile definire un metodo di estensione generico in F #?
- 20. È possibile definire un tipo ricorsivo in Common Lisp?
- 21. Definire il file mappa modulo personalizzato in cocoapods Podspec
- 22. È possibile definire un meccanismo di protezione personalizzato in Haskell?
- 23. In Dart, è possibile avere una mappa const di chiusure?
- 24. È possibile dividere una stringa su più righe in un file XML? Se é cosi, come?
- 25. È possibile definire una struttura C più volte?
- 26. Java: è buona pratica definire i bean in XML?
- 27. È possibile definire un tipo generico Vettore in Actionsctipt 3?
- 28. Rails: è possibile definire lo scope denominato in un modulo?
- 29. È possibile definire un lambda generico in C#?
- 30. È possibile definire un blocco con argomenti predefiniti in Ruby?
controllo questo out..http:? //mobiforge.com/developing/story/using-google-maps-android dm_switcher = true – dreamcoder
Potete per favore farci un esempio quello che vorresti fare esattamente? – Blehi
Blehi, voglio avere una mappa statica a cui posso accedere più volte da qualsiasi classe. Vorrei, idealmente, avere questo aspetto: – ilomambo