You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Zxing库为Android应用生成含Transaction对象的二维码?

在Android中生成包含Transaction对象的二维码方案

嘿,我来给你梳理下具体的实现步骤,这在Android开发里是很常见的需求,核心思路就是把结构化的Transaction对象转成二维码能识别的文本格式(通常是JSON),再用二维码生成库把文本转成二维码图片。

第一步:把Transaction对象序列化为JSON字符串

二维码只能存储文本内容,所以首先得把你的Transaction对象转成标准的JSON字符串——这样后续扫描二维码后,也能方便地把文本还原回对象。

我个人推荐用Google的Gson库来做序列化,比Android自带的JSONObject更省心:

  1. 先在你的app模块的build.gradle(或者build.gradle.kts)里添加Gson依赖:
    implementation 'com.google.code.gson:gson:2.10.1'
    
  2. 假设你的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;
        }
    }
    
  3. 把对象转成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,集成起来更方便:

  1. 添加依赖到build.gradle:
    implementation 'com.journeyapps:zxing-android-embedded:4.3.0'
    
  2. 编写生成二维码的工具方法,返回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;
    }
    
  3. 调用方法生成并显示二维码:
    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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 04:00:27