Room 引用复杂数据

https://developer.android.com/training/data-storage/room/referencing-data?hl=zh-cn#converter-initialization

在使用room的时候,如果要保存的entity中有 bitmap,或者其他复杂的对象,我们没办法直接保存,这个时候,就涉及到类型转换

https://medium.com/@rasim0042/type-converter-for-room-db-2700e968a6d5

比如下面这个entity,想要直接保存bitmap,这个时候,我们需要告诉room如何进行类型转换

@Entity(tableName = "running_table")
data class Run(
    var img: Bitmap? = null,
    var timestamp: Long = 0L,
    var avgSpeedInKMH: Float = 0f,
    var distanceInMeters: Int = 0,
    var timeInMillis: Long = 0L,
    var caloriesBurned: Int = 0
) {
    @PrimaryKey(autoGenerate = true)
    var id: Int? = null
}

写一个Converters,具体的转换方法上添加@TypeConverter注释

class Converters {

    @TypeConverter
    fun toBitmap(bytes: ByteArray): Bitmap {
        return BitmapFactory.decodeByteArray(bytes, 0, bytes.size)
    }

    @TypeConverter
    fun fromBitmap(bmp: Bitmap): ByteArray {
        val outputStream = ByteArrayOutputStream()
        bmp.compress(Bitmap.CompressFormat.PNG, 100, outputStream)
        return outputStream.toByteArray()
    }
}

然后将这个注册到数据库

@Database(
    entities = [Run::class],
    version = 1
)
@TypeConverters(Converters::class)
abstract class RunningDatabase : RoomDatabase() {

    abstract fun getRunDao(): RunDAO
}

这样在保存数据的时候就可以直接操作了

 @Insert(onConflict = OnConflictStrategy.REPLACE)
    suspend fun insertRun(run: Run)

读取也是可以直接返回

 @Query("SELECT * FROM running_table ORDER BY distanceInMeters DESC")
    fun getAllRunsSortedByDistance(): LiveData<List<Run>>

### Data Room 数据可视化的方法与工具 Data Room 是指一种集中存储和管理敏感数据的空间,通常用于商业交易、法律事务或其他需要高度保密性的场景。为了更好地理解和利用这些数据数据可视化成为不可或缺的一部分。 #### 常见的数据可视化方法 1. **热力图 (Heatmap)** 热力图是一种通过颜色强度展示数值大小的图表形式,在显示空间分布或时间序列上的变化非常有效。例如,在引用中提到的某次会议中的人员移动轨迹监控[^4],可以使用热力图来直观呈现不同区域内的人流量密度。 2. **交互式仪表盘 (Interactive Dashboards)** 交互式仪表盘允许用户动态筛选、过滤以及探索多维数据集。这种类型的可视化特别适合复杂的企业级应用环境下的 data room 场景。Tableau 提供了一种经济实惠的选择方案,尤其针对预算有限的小型企业[^2]。 3. **网络图 (Network Graphs)** 当涉及关系型数据时,比如公司之间的合作关系或者文档间的引用链接,网络图能够清晰表达节点间的关系结构及其权重属性。 4. **地理信息系统(GIS)地图** 如果 data room 中包含了地理位置信息,则 GIS 技术可以帮助创建基于位置的服务(LBS),从而更深入地洞察区域性趋势。例如房地产市场的分析可能需要用到此类技术来展现房源分布情况[^3]。 #### 推荐使用的数据可视化工具/平台 以下是几个适用于构建高效 data room 的主流数据可视化软件: - **Power BI**: Microsoft 开发的强大BI工具,支持连接多种数据库源并生成精美的报告页面。 - **Tableau Public/Desktop Server**: 被广泛应用于商业智能领域的产品线之一;它不仅具备强大的图形渲染能力还提供免费版本(Tableau Public). - **QlikView/Qliksense**: 另一款专注于自助式数据分析体验的应用程序家族成员, 它们强调快速响应查询请求的同时保持较高的灵活性. - **D3.js**: 对于开发者而言,D3是一个灵活而功能全面的JavaScript库,可用于制作定制化程度很高的web端视觉效果. ```javascript // 使用 D3.js 创建简单柱状图的例子 var svg = d3.select("body").append("svg") .attr("width", 500) .attr("height", 300); var dataset = [5, 10, 15, 20]; svg.selectAll("rect") .data(dataset) .enter() .append("rect") .attr("x", function(d,i){return i * 70;}) .attr("y", function(d){return 300 - d*10;}) .attr("width", 65) .attr("height",function(d){return d*10;}); ``` 以上代码片段展示了如何借助 JavaScript 库 D3 来绘制基本条形图。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值