如何在Realm中存储Drawable文件?

时间:2015-12-10 06:34:46

标签: android android-drawable realm

我只是想在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数据库中存储可绘制文件。

2 个答案:

答案 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中保存路径。