feature(Android): add GxHashMap in Android for Dictionary data type#1118
feature(Android): add GxHashMap in Android for Dictionary data type#1118fpanizza wants to merge 6 commits into
Conversation
Cherry pick to beta success |
Cherry pick to beta success |
Cherry pick to beta success |
Cherry pick to beta success |
This reverts commit 0da632c.
Cherry pick to beta success |
…lization. Resolve value types consistently in fromJson by detecting valueClass from first element or prior put(). Emulate Jackson behavior.
Cherry pick to beta success |
|
|
||
| public boolean removeKey(K key) { | ||
| if (containsKey(key)) { | ||
| if (remove(key) != null) |
There was a problem hiding this comment.
El valor asociado a la clave podría ser null y en ese caso este método retorna false. Entiendo que debería devolver true si alguna clave fue removida.
| for (Map.Entry<String, JsonElement> entry : jsonObject.entrySet()) { | ||
| K key; | ||
| if (isNumberKey) { | ||
| key = (K) java.text.NumberFormat.getInstance().parse(entry.getKey()); |
There was a problem hiding this comment.
Este NumberFormat.getInstance() usa el locale del dispositivo para el separador de decimales, pero JSON usa siempre el punto, por lo que la key podría resultar en un valor que luego dé error de parseo. Habría que usar los métodos de parsing "comunes" (valueOf) de los tipos de datos numéricos.
|
|
||
| public V put(K key, V value) { | ||
| if (key instanceof Number) | ||
| isNumberKey = true; |
There was a problem hiding this comment.
isNumberKey nunca se resetea a false. No sé si es posible que el tipo de datos de la clave cambie sobre la misma instancia o no. En caso de que no, se puede desestimar este comentario.
| return gson.toJson(this); | ||
| } | ||
| catch (Exception e) { | ||
| AndroidLog.error("Could not obtain json form Dictionary "+ e.getMessage()); |
|
|
||
| public void fromJson(String json) { | ||
| try { | ||
| this.clear(); |
There was a problem hiding this comment.
Está bien este clear() al inicio independientemente de que el parseo tire o no una excepción? Si algo falla más abajo, el mapa queda vacío/corrupto con los datos nuevos a medias.
| return convertToCharRest(this, true); | ||
| } | ||
|
|
||
| private GXHashMap<K, String> convertToCharRest(GXHashMap<K, V> thisHashMap, boolean isDateTime) { |
There was a problem hiding this comment.
El primer parámetro que recibe este método es siempre this. Mejor quitarlo y simplemente iterar sobre entrySet().
|
Aclaro que la mayoria de tus comentarios vienen de la version de java , que migre a Gson solamente De cualquier manera las miro 1 a 1 para dejarlo lo mejor posible. |
Problem
Android Offline Generator - Error compilando SDTs con Dictionary
https://issues.genexus.dev/viewissue.aspx?208671
Solution
Add GxHashMap in android for dictionary implementation.
Necesario para el cambio en el generador offline,
https://github.com/VY-GEN032-KG/genexus-suite-legacy/pull/1986