本文仅记录用 zxing 生成二维码时,Kotlin 写法失效的现象及规避方法,至于原因还没有去深究。
最近项目有个需求,生成支付二维码并展示,供用户扫码支付。
起初我考虑的是因为二维码为支付码,有可能支付平台有什么生成规则的要求,但查阅了相关官方文档,没有特殊要求,可见应该可以用通用的生成逻辑。
zxing 库是经典的处理条形码相关的一个库,生成二维码自然也不在话下。由于正在用 Kotlin 写项目代码,就照着原本的 Java 实现,写了一遍 Kotlin 实现。
这里生成的大致逻辑是通过 zxing 库的方法将字符串加密成矩阵数据,然后生成一个矩形像素组(用长*宽大小的数组表示)根据矩阵信息,分别给数组赋值黑白色,最后将数组写入新建的 Bitmap 图像中。
问题就出现在写入 Bitmap 图像中,不管怎么调用,最终的图像依然没有数据。接着又是对 zxing 库的依赖版本,相关方法一顿比较,依然没有结果。最后又将字符串内容用 Java 实现的方式进行生成二维码,发现非常正常,然而这段逻辑,两种实现是一模一样的,我也一时找不出原因。
最后我将这段数据转化用 Java 写成了工具方法,再用 Kotlin 去调用发现是可行的。
我猜测要么是我写法上有问题,导致数据设置失效了,要么是因为 Bitmap 设置像素点的方法涉及到 native 方法,导致失效。当然这些都是没有实践过的,仅仅是猜想。
网友评论