Подтвердить что ты не робот

Android: Sqlite сохраняет строковый массив?

Мне нужно сохранить строковый массив в базе данных, но он не позволит мне это то, что у меня есть:

 public long createEntry(String startTime, String endTime, String[] states) {
         ContentValues initialValues = new ContentValues();
         initialValues.put(START_KEY_TIME , startTime);
         initialValues.put(END_KEY_TIME , endTime);
         initialValues.put(KEY_STATE, states );
             return databaseConnect.insert(DATABASE_TABLE, null, initialValues);
        }

но если я ставлю строку [], в нем говорится, что cotentvalues ​​не может принять аргумент. как мне обойти это. Я думал, что у меня есть 7 вещей в состояниях, я мог бы иметь 7 строк sepearte и хранить вещи в каждом, а затем после того, как все строки вернутся в массив строк или это будет плохой практикой?

4b9b3361

Ответ 1

Вы не можете сохранить массив String в базу данных. Но вы можете использовать этот трюк.

1) Итак, вам нужно преобразовать его в простой String с помощью метода convertArrayToString(String[] array). Это приведет к конкатенации всех элементов строки, используя "запятую".

2). Когда вы вернете эту строку из базы данных, вы можете преобразовать ее обратно в массив String с помощью метода convertStringToArray(String str). Этот метод разделит строку на "запятую", и вы вернете исходный массив.

public static String strSeparator = "__,__";
public static String convertArrayToString(String[] array){
    String str = "";
    for (int i = 0;i<array.length; i++) {
        str = str+array[i];
        // Do not append comma at the end of last element
        if(i<array.length-1){
            str = str+strSeparator;
        }
    }
    return str;
}
public static String[] convertStringToArray(String str){
    String[] arr = str.split(strSeparator);
    return arr;
}

Ответ 2

Преобразуйте его в одиночный String, чтобы сохранить его в sqlite. Позже, верните его из sqlite как одну строку и преобразуйте обратно в Array of String.

String ARRAY_DIVIDER = "#a1r2ra5yd2iv1i9der";

public String serialize(String content[]){      
    return TextUtils.join(ARRAY_DIVIDER, content);
}

public String[] derialize(String content){
    return content.split(ARRAY_DIVIDER);
}

Ответ 3

Основываясь на ответе Мухаммеда, но обрабатывает список строк вместо массива и использует StringBuffer вместо String для конкатенации значений:

private static String LIST_SEPARATOR = "__,__";

public static String convertListToString(List<String> stringList) {
    StringBuffer stringBuffer = new StringBuffer();
    for (String str : stringList) {
        stringBuffer.append(str).append(LIST_SEPARATOR);
    }

    // Remove last separator
    int lastIndex = stringBuffer.lastIndexOf(LIST_SEPARATOR);
    stringBuffer.delete(lastIndex, lastIndex + LIST_SEPARATOR.length() + 1);

    return stringBuffer.toString();
}

public static List<String> convertStringToList(String str) {
    return Arrays.asList(str.split(LIST_SEPARATOR));
}

Ответ 4

Было бы проще, если бы вы преобразовали массив строк в JSONArray, используйте toString, а затем, извлеките его, сначала проанализируя в JSONArray, а затем преобразуйте его в массив строк

Ответ 5

Похоже, что ваша база данных не разработана так, как должна быть. Если вы хотите сохранить логические данные в базе данных SQLite, вы можете сохранить логические значения в виде целых чисел 0 (false) и 1 (true)