Skip to content

Commit 95f7298

Browse files
authored
Fix loading of array args from cache (#438)
* Fix loading of array args from cache
1 parent b82fb2c commit 95f7298

File tree

1 file changed

+27
-7
lines changed

1 file changed

+27
-7
lines changed

AndroidSDKCore/src/main/java/com/leanplum/internal/VarCache.java

Lines changed: 27 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -280,14 +280,34 @@ public static Object mergeHelper(Object vars, Object diff) {
280280
for (Object var : varsKeys) {
281281
merged.add(var);
282282
}
283-
for (Object varSubscript : diffKeys) {
284-
String strSubscript = (String) varSubscript;
285-
int subscript = Integer.parseInt(strSubscript.substring(1, strSubscript.length() - 1));
286-
Object var = diffMap != null ? diffMap.get(strSubscript) : null;
287-
while (subscript >= merged.size()) {
288-
merged.add(null);
283+
284+
// Merge values from server
285+
// Array values from server come as Dictionary
286+
// Example:
287+
// string[] items = new string[] { "Item 1", "Item 2"};
288+
// args.With<string[]>("Items", items); // Action Context arg value
289+
// "vars": {
290+
// "Items": {
291+
// "[1]": "Item 222", // Modified value from server
292+
// "[0]": "Item 111" // Modified value from server
293+
// }
294+
// }
295+
// Prevent error when loading variable diffs where the diff is an Array and not Dictionary
296+
if (diffMap != null) {
297+
for (Object varSubscript : diffKeys) {
298+
if (varSubscript instanceof String) {
299+
String strSubscript = (String) varSubscript;
300+
if (strSubscript.length() > 2 && strSubscript.startsWith("[") && strSubscript.endsWith("]")) {
301+
// Get the index from the string key: "[0]" -> 0
302+
int subscript = Integer.parseInt(strSubscript.substring(1, strSubscript.length() - 1));
303+
Object var = diffMap.get(strSubscript);
304+
while (subscript >= merged.size() && merged.size() < Short.MAX_VALUE) {
305+
merged.add(null);
306+
}
307+
merged.set(subscript, mergeHelper(merged.get(subscript), var));
308+
}
309+
}
289310
}
290-
merged.set(subscript, mergeHelper(merged.get(subscript), var));
291311
}
292312
return merged;
293313
}

0 commit comments

Comments
 (0)