如何使用Zxing库为Android应用生成含Transaction对象的二维码?
在Android中生成包含Transaction对象的二维码方案
嘿,我来给你梳理下具体的实现步骤,这在Android开发里是很常见的需求,核心思路就是把结构化的Transaction对象转成二维码能识别的文本格式(通常是JSON),再用二维码生成库把文本转成二维码图片。
第一步:把Transaction对象序列化为JSON字符串
二维码只能存储文本内容,所以首先得把你的Transaction对象转成标准的JSON字符串——这样后续扫描二维码后,也能方便地把文本还原回对象。
我个人推荐用Google的Gson库来做序列化,比Android自带的JSONObject更省心:
- 先在你的app模块的
build.gradle(或者build.gradle.kts)里添加Gson依赖:implementation 'com.google.code.gson:gson:2.10.1' - 假设你的
Transaction类是这样的:public class Transaction { private String name; private String email; private int id; private String book; private String isbn; // 构造函数、getter/setter 按需实现 public Transaction(String name, String email, int id, String book, String isbn) { this.name = name; this.email = email; this.id = id; this.book = book; this.isbn = isbn; } } - 把对象转成JSON字符串:
// 创建Transaction实例 Transaction transaction = new Transaction( "James", "james@example.com", 1001, "Android App Development", "978-1491971912" ); // 序列化 String transactionJson = new Gson().toJson(transaction);
第二步:用ZXing库生成二维码图片
ZXing是目前Android上最常用的二维码生成/扫描库,你可以用它的简化封装版本zxing-android-embedded,集成起来更方便:
- 添加依赖到
build.gradle:implementation 'com.journeyapps:zxing-android-embedded:4.3.0' - 编写生成二维码的工具方法,返回Bitmap对象:
import android.graphics.Bitmap; import android.graphics.Color; import com.google.zxing.BarcodeFormat; import com.google.zxing.WriterException; import com.google.zxing.common.BitMatrix; import com.google.zxing.qrcode.QRCodeWriter; private Bitmap generateQrCode(String content) throws WriterException { QRCodeWriter writer = new QRCodeWriter(); // 设置二维码宽高,500x500足够清晰 BitMatrix bitMatrix = writer.encode( content, BarcodeFormat.QR_CODE, 500, 500 ); int width = bitMatrix.getWidth(); int height = bitMatrix.getHeight(); int[] pixels = new int[width * height]; // 给二维码上色,这里用黑底白码 for (int y = 0; y < height; y++) { int offset = y * width; for (int x = 0; x < width; x++) { pixels[offset + x] = bitMatrix.get(x, y) ? Color.BLACK : Color.WHITE; } } Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888); bitmap.setPixels(pixels, 0, width, 0, 0, width, height); return bitmap; } - 调用方法生成并显示二维码:
try { Bitmap qrBitmap = generateQrCode(transactionJson); // 把Bitmap设置到你的ImageView里展示 qrImageView.setImageBitmap(qrBitmap); } catch (WriterException e) { e.printStackTrace(); // 给用户友好提示 Toast.makeText(this, "二维码生成失败", Toast.LENGTH_SHORT).show(); }
额外提示:扫描二维码还原Transaction对象
如果你后续需要扫描这个二维码获取Transaction数据,同样用ZXing的扫描功能拿到JSON字符串,再反序列化回去:
// scannedContent是扫描得到的JSON字符串 Transaction scannedTransaction = new Gson().fromJson(scannedContent, Transaction.class); // 之后就可以直接使用scannedTransaction中的字段了
注意事项
- 确保
Transaction类字段和JSON键对应,如需自定义JSON字段名,可使用@SerializedName注解,比如@SerializedName("user_name") private String name; - QR码有内容长度限制,普通版本可存几百个字符,你的
Transaction字段完全够用;若内容较多,可在encode方法中指定更高版本的QR码 - 记得处理异常情况,比如序列化失败、二维码生成失败,给用户清晰的反馈
内容的提问来源于stack exchange,提问作者James
相关产品推荐
相关产品推荐

