我只是想在Realm数据库中存储一个Drawable图像文件,但是在Realm Object中赋值之后,它显示一条错误消息:“错误:不支持输入字段android.graphics.drawable.Drawable”。< / p>
public class AppsList extends RealmObject {
public Drawable getAppIcon() {
return appIcon;
}
public void setAppIcon(Drawable appIcon) {
this.appIcon = appIcon;
}
}
Intent i = new Intent(Intent.ACTION_MAIN, null);
i.addCategory(Intent.CATEGORY_LAUNCHER);
List<ResolveInfo> availableActivities = manager.queryIntentActivities(
i, 0);
for (ResolveInfo ri : availableActivities) {
realm.beginTransaction();
appsIconList = realm.createObject(AppsList.class);
appsIconList.setAppLabel(ri.loadLabel(manager).toString());
appsIconList.setAppPackageName(ri.activityInfo.packageName.toString());
appsIconList.setAppIcon(ri.activityInfo.loadIcon(manager).toString());
realm.commitTransaction();
}
请仔细阅读我的帖子,告诉我如何在Realm数据库中存储可绘制文件。
答案 0 :(得分:1)
我认为你不能那样做。 Realm仅支持以下类型:
INTEGER,
BOOLEAN,
STRING,
BINARY,
DATE,
FLOAT,
DOUBLE,
参考文献:RealmFieldType.java
实际上你也可以用Integer格式存储drawable的id,但是也不推荐它,因为每次你构建项目时都会生成id,并且它有可能会从你上次保存的内容中改变。
如果您有drawable的名称,您还可以将drawable名称存储到Realm数据库并使用此代码获取drawable的id
Resources resources = context.getResources();
int resourceId = resources.getIdentifier(name, "drawable",
context.getPackageName());
答案 1 :(得分:0)
Realm不直接支持Drawable。您必须先将Drawable转换为可序列化的byte[]
。这可能意味着首先将其转换为Bitmap。 @EpicPandaForce提供的答案是一个良好的开端:Drawable to byte[]
虽然有很多开销。我建议将Drawable保存为文件系统上的文件,而不是在Realm中保存路径。