如何将条码数据保存至TextView?JSON格式条码生成问题
条码特殊字符限制与扫描解析适配方案
看起来你遇到了条码生成工具的字符限制问题——QR码因为本身支持任意文本所以没问题,但有些条码类型(比如常见的Code 39)确实对特殊字符有限制,不过咱们有两个方向可以解决这个问题:
方案一:生成支持特殊字符的条码
首先要明确:Code 128类型的条码支持所有ASCII字符,包括{、}、,这些你需要的符号。问题出在你用的在线生成工具可能默认限制了输入,或者选择了不支持特殊字符的条码类型。
你可以这么做:
- 换一个支持Code 128且允许输入任意ASCII字符的在线条码生成器,选择Code 128类型,直接输入
{"name":"Gabriel","address":"NoNameStreet"}就能生成符合要求的条码,扫描后你的现有代码就能正常解析。 - 如果你找不到合适的在线工具,也可以用本地工具(比如一些开源的条码生成库)来生成,不过在线工具只要选对类型基本都能解决。
方案二:修改代码兼容无特殊字符的条码格式
如果实在没法生成带JSON格式的条码,咱们可以修改代码,兼容一种更简单的文本格式,比如用分隔符(比如|、;)来拆分姓名和地址,这样生成条码时只需要输入类似Gabriel|NoNameStreet的内容即可。
修改你的onActivityResult方法中的catch块,添加分隔符解析逻辑:
@Override protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) { IntentResult result = IntentIntegrator.parseActivityResult(requestCode, resultCode, data); if(result != null) { if (result.getContents() == null) { Toast.makeText(this, "Result not found", Toast.LENGTH_SHORT).show(); } else { try { JSONObject obj = new JSONObject(result.getContents()); textViewName.setText(obj.getString("name")); textViewAddress.setText(obj.getString("address")); } catch (JSONException e) { e.printStackTrace(); // 兼容分隔符格式的解析逻辑 String content = result.getContents(); // 用|作为分隔符,你也可以换成其他不冲突的符号比如; String[] infoParts = content.split("\\|"); if (infoParts.length == 2) { textViewName.setText(infoParts[0].trim()); textViewAddress.setText(infoParts[1].trim()); } else { // 如果既不是JSON也不是分隔符格式,就显示原始内容 Toast.makeText(this, result.getContents(), Toast.LENGTH_SHORT).show(); } } } }else{ super.onActivityResult(requestCode, resultCode, data); } }
这样修改后,你的APP既能兼容原来的JSON格式QR码/条码,也能兼容简单分隔符格式的条码,灵活性更高。
小提示
如果选择方案一,生成条码时一定要确认选择的是Code 128类型,不要选Code 39(它只支持数字、字母和有限的特殊符号),这样就能顺利包含JSON需要的所有字符了。
内容的提问来源于stack exchange,提问作者IllogicalOverride
相关产品推荐
相关产品推荐

