Во-первых String[] icons = {123,123} - это ошибка компиляции. Вы объявляете массив стрингов, и пытаетесь заполнить его интами.
Во-вторых вот в этом коде
for(int i = 0; i < arr4.length(); i++) {
String icons = arr4.getJSONObject(i).getString("icons");
list4.add(icons);
}
поменяйте getString на getInt (или как там у вас называется метод, который превращает JsonPrimitive в инт). Ну и меняйте везде String на инт. Зачем вы создаете список, заполняете его, а потом героически преобразуете в массив?
int[] arr = new int[arr4.length];
for (...) {
arr[i] = arr4[i]....
}
adapter = new BlaBlaAdapter(... arr);
В третьих вам уже сказали - вы пишете чушь, инты в R классах меняются. Если у вас динамические иконки - лейте их по сети. В крайнем случае храните стринговые имена, но уж никак не ресурсные инты. Но даже имена - это тоже бред, просто пукан у вас будет полыхать не после каждого ребилда, а после изменения сетов иконок.