Есть ли простой способ конвертировать из java Map<String,Object>
в android.content.ContentValues
?
android.content.ContentValues
используется в программировании базы данных Android для хранения данных строки базы данных в виде пар имя-значение.
Задний план:
Я пытаюсь перенести бизнес-логику существующего приложения для Android в приложение j2se-swing.
Моя цель - иметь специфичный для Android код и независимый от Android код, который входит в отдельную библиотеку, которая может использоваться как Android, так и Swing-GUI.
сейчас я анализирую
- если мне нужно реализовать полный отдельный набор репозиторий с большим количеством избыточного кода
- или если есть общий код, который можно использовать в обоих репозиториях (j2se-swing- и android-).
Repository-Database-Code использует пары "база данных-поле-имя-значение", в которых используется android.content.ContentValues
.
Я думал, что моя независимая версия Android может использовать HashMap<String,Object>
вместо ContentValues
и создавать код для преобразования между ними.
Версия, зависящая от Android, будет выглядеть так
// android dependant code in android-app
class AndroidTimeSliceCategoryRepsitory implements ICategoryRepsitory {
public long createTimeSliceCategory(final TimeSliceCategory category) {
// get values from android independant layer
Map<String, Object> columsToBeInserted = TimeSliceCategorySql.asHashMap(category);
// >>>> this is where i am stuck
ContentValues androidColumsToBeInserted = DbUtils.asContentValues(columsToBeInserted);
final long newID = AndroidTimeSliceCategoryRepsitory.DB.getWritableDatabase()
.insert(TimeSliceCategorySql.TIME_SLICE_CATEGORY_TABLE, null, androidColumsToBeInserted);
category.setRowId((int) newID);
return newID;
}
}
Это независимая часть Android:
// android independant code in common jar
class TimeSliceCategorySql {....
/** converts {@link ....model.TimeSliceCategory} to {@link java.util.HashMap} */
public static Map<String, Object> asHashMap(final TimeSliceCategory category) {
final Map<String, Object> values = new HashMap<String, Object>();
values.put(TimeSliceCategorySql.COL_CATEGORY_NAME,
category.getCategoryName());
values.put(TimeSliceCategorySql.COL_DESCRIPTION,
category.getDescription());
// ... more values
return values;
}
}
В настоящее время я застрял здесь:
public class AndroidDatabaseUtil {
/** converts from android independeant {@link java.util.Map} to android dependent {@link android.content.ContentValues} */
public static ContentValues toContentValues(Map<String, Object> src) {
ContentValues result = new ContentValues();
for (String name : src.keySet()) {
// this is not possible because ContentValues does not define put(String name, Object value)
result.put(name, src.get(name));
// using this would loose ContentValues.getAsLong() throw exception.
// result.put(name, src.get(name).toString());
}
src.entrySet()
return result;
}
}
Object
в вашей хэш-карте? - person Kyle Emmanuel   schedule 02.08.2014