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 и хранить вещи в каждом, а затем после того, как все строки вернутся в массив строк или это будет плохой практикой?
Ответы
Ответ 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)