【问题标题】:Store object of Drawable class in database在数据库中存储 Drawable 类的对象
【发布时间】:2019-12-03 21:00:04
【问题描述】:

我使用 IconDialog 库为我的 ImageView 设置一个图标,用户将设置它们。这个库将返回一个 Drawable 对象。当我没有数据库时,使用这个库没有问题,因为我只是调用了 setDrawable 函数并将返回的可绘制对象传递给它,但是现在我想将此可绘制对象的引用存储到数据库中,但在可绘制对象中找不到任何方法.class 来获取drawable或其他东西的引用,我在库中找不到返回任何引用的任何函数。有什么想法吗?

【问题讨论】:

    标签: java android kotlin


    【解决方案1】:

    你可以使用Resource.getIdentifier

    int imgId = res.getIdentifier(resourceName, "drawable", context.getPackageName());
    

    【讨论】:

    • 该库没有将可绘制图标添加到我的项目中,它只是向我发送了一个可绘制类的对象
    • 我知道您想要什么,我认为您需要修改库以将返回更改为 resourceName 并包含在您的项目中
    【解决方案2】:

    我想你的意思是你想在你的 SQLite 数据库中存储一个 Drawable? 你可以去

    val icon = BitmapFactory.decodeResource(this.resources, R.drawable.minus_vector_black)
    val stream = ByteArrayOutputStream()        
    icon.compress(Bitmap.CompressFormat.PNG, 100, stream)
    val iconAsByteArray = stream.toByteArray()
    

    然后将其作为 BLOB 保存到数据库中

    (无耻地从converting Java bitmap to byte array盗取代码)

    【讨论】:

    • 是的,但是可绘制对象不在我的项目中作为 R.drawable.XXX。它只是 Drawable 类的一个对象。
    【解决方案3】:

    致所有使用此库并遇到与我相同问题的人。我通过探索图书馆代码找到了答案。有一个名为 Icon 的类,IconDialog 返回此变量的实例。由于 Icon 的构造函数是私有的,因此您不能从该类实例化,因此您应该首先将它们转换为 Drawable 然后将那些 Drawables 转换为 Bitmap(如果你不知道怎么结帐this link)。

    为了将 Bitmap 存储在数据库中,您只需使用 this linkBitmap 转换为 String
    或存储文件中的位图然后存储链接或您知道的任何其他方式。

    希望这能解决您的问题:)

    【讨论】:

      猜你喜欢
      • 2013-01-10
      • 1970-01-01
      • 2019-09-15
      • 2011-11-09
      • 1970-01-01
      • 2016-07-18
      • 1970-01-01
      • 2011-10-22
      相关资源
      最近更新 更多