如何从java转换。util。HashMap到安卓。所容纳之物内容价值观?
有没有一种简单的方法可以将java Map<String,Object>
转换为安卓.content.ContentValues
安卓.content.ContentValues
在安卓数据库编程中用于将数据库行的数据保持为名称-值对
背景:
我尝试将现有安卓应用程序的业务逻辑移植到j2se swing应用程序
我的目标是拥有特定于安卓的代码 以及安卓独立代码,该代码进入一个单独的库,可供安卓和swing gui使用
目前我正在分析
- 如果我必须用大量冗余代码实现一整套独立的Repository实现
- 或者,如果有通用代码可以在(j2se swing和安卓)存储库实现中使用李>
存储库数据库代码依赖于使用安卓.content.ContentValues
的数据库字段名-值对
我认为我的安卓独立版本可以使用HashMap<String,Object>
插入ContentValues
并创建代码在两者之间进行转换
依赖安卓的版本会是这样的
// 安卓 dependant code in 安卓-app
class AndroidTimeSliceCategoryRepsitory implements ICategoryRepsitory {
public long createTimeSliceCategory(final TimeSliceCategory category) {
// get values from 安卓 independant layer
Map<String, Object> columsToBeInserted = TimeSliceCategorySql.asHashMap(category);
// >>>> this is where i am stuck
ContentValues 安卓ColumsToBeInserted = DbUtils.asContentValues(columsToBeInserted);
final long newID = AndroidTimeSliceCategoryRepsitory.DB.getWritableDatabase()
.insert(TimeSliceCategorySql.TIME_SLICE_CATEGORY_TABLE, null, 安卓ColumsToBeInserted);
category.setRowId((int) newID);
return newID;
}
}
这是安卓独立部分:
// 安卓 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 安卓 independeant {@link java.util.Map} to 安卓 dependent {@link 安卓.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;
}
}
# 1 楼答案
看起来你在地图中输入的值是字符串
因此,可以将地图的定义更改为
这将允许您在
ContentValues
实例中放置值:# 2 楼答案
可以在
if
语句中使用instanceof
关键字对其进行筛选例如:
也可以从对象中使用
getClass
方法:对象ob=src。获得(姓名)