2016-01-26 4 views
1

Есть ли способ сохранить списки примитивов в штучной упаковке и строки в RushORM? Что-то вроде ArrayList<String> или ArrayList<Integer>? Я знаю, что могу обернуть int/String в объект, который расширяет RushObject, но я надеюсь, что мне не нужно прибегать к этому.Хранение списков в штучной упаковке/Строки?

Я уже пытался: @RushList(classType = String.class) , но он не будет компилировать как тип класса должен распространяться RushObject.

ответ

1

Что вы хотите сделать, это реализовать свой собственный тип столбца для тех вложенных в бокс примитивов.

Единственное, что вам нужно сделать, это переключить их на Array String [] или int [], поскольку вы не сможете получить тип, используя ArrayList. Вот специальный столбец int [].

public class IntArrayColumn implements RushColumn<int[]> { 

    private static final String DELIMITER = ","; 

    @Override 
    public String sqlColumnType() { 
     return "varchar(255)"; 
    } 

    @Override 
    public String serialize(int[] ints, RushStringSanitizer rushStringSanitizer) { 
     return rushStringSanitizer.sanitize(join(ints)); 
    } 

    @Override 
    public int[] deserialize(String s) { 
     return split(s); 
    } 

    @Override 
    public Class[] classesColumnSupports() { 
     return new Class[]{int[].class}; 
    } 

    private String join(int[] ints) { 
     if (ints.length > 0) { 
      StringBuilder sbuild = new StringBuilder(); 
      for (int i = 0; i < ints.length; i++) { 
       sbuild.append(ints[i]).append(DELIMITER); 
      } 
      sbuild.delete(sbuild.lastIndexOf(DELIMITER), sbuild.length()); 
      return sbuild.toString(); 
     } else { 
      return ""; 
     } 
    } 

    private int[] split(String source) { 
     if (source != null) { 
      if (source.isEmpty()) { 
       return new int[0]; 
      } 
      String[] items = source.split(DELIMITER); 
      int[] ints = new int[items.length]; 
      for (int i = 0; i < ints.length; i++) { 
       ints[i] = Integer.valueOf(items[i]); 
      } 
      return ints; 
     } 
     return null; 
    } 
} 

Затем измените функцию инициализации, чтобы выглядеть так.

AndroidInitializeConfig config = new AndroidInitializeConfig(getApplicationContext()); 
config.addRushColumn(new IntArrayColumn()); 
RushCore.initialize(config); 

Единственное падение - вы не сможете запросить что-либо, это список.

Надеюсь, что это поможет.

+0

Вы только что поняли, что поля, которые я объявлял ArrayLists, не изменяются в любом случае, поэтому, превратив их в массивы и добавив для них настраиваемый столбец, это технически решает мою проблему. Спасибо за помощь! – nulldev

Смежные вопросы