Android带数字选择器与时间选择器的二维码生成问题求助
解决方法
1. 修正Java代码
修改后的完整代码如下:
public class Visitor extends Activity { // 修正变量名,匹配布局里的TimePicker ID TimePicker timeTp; NumberPicker minNp; private String[] minutesArray; Button createBtn; ImageView qrcodeIv; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.qrcode); // 初始化TimePicker timeTp = findViewById(R.id.tp); // 初始化NumberPicker minNp = findViewById(R.id.npMin); minNp.setMaxValue(5); minNp.setMinValue(0); minutesArray = new String[] {"15","30","45","60","75","90"}; minNp.setDisplayedValues(minutesArray); qrcodeIv = findViewById(R.id.ivQrcode); createBtn = findViewById(R.id.btnCreate); createBtn.setOnClickListener(view -> { MultiFormatWriter multiFormatWriter = new MultiFormatWriter(); try { // 1. 处理ID:这里用固定示例值,需用户输入可添加EditText获取 String id = "1234567"; // 2. 从TimePicker获取时间,格式化为HHmm格式(如10点19分转为1019) int hour = timeTp.getCurrentHour(); int minute = timeTp.getCurrentMinute(); String timeStr = String.format("%02d%02d", hour, minute); // 3. 获取NumberPicker选中的分钟值(取显示的字符串,而非索引) String selectedMin = minutesArray[minNp.getValue()]; // 4. 拼接成预期格式:ID 时间 分钟 String qrContent = id + " " + timeStr + " " + selectedMin; // 用拼接好的内容生成二维码 BitMatrix bitMatrix = multiFormatWriter.encode(qrContent, BarcodeFormat.QR_CODE,400,400); BarcodeEncoder barcodeEncoder = new BarcodeEncoder(); Bitmap bitmap = barcodeEncoder.createBitmap(bitMatrix); qrcodeIv.setImageBitmap(bitmap); InputMethodManager manager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); manager.hideSoftInputFromWindow(minNp.getApplicationWindowToken(), 0); } catch (WriterException e) { e.printStackTrace(); } }); } }
2. 关键改动说明
- 修复TimePicker绑定:原代码里定义的
DatePicker timeDp既不对类型也不匹配布局ID,改成TimePicker timeTp并通过findViewById(R.id.tp)绑定控件,才能获取用户选择的时间。 - 获取正确的NumberPicker值:用
minutesArray[minNp.getValue()]拿到用户可见的分钟字符串(比如选中第0项就是"15"),而非直接取索引值。 - 时间格式化:通过
String.format("%02d%02d", hour, minute)把小时和分钟转为两位数字的字符串(比如9点5分会变成"0905",匹配示例格式)。 - 拼接目标格式:将ID、格式化后的时间、选中的分钟用空格拼接成预期字符串,再传入二维码生成方法。
3. 关于ID的补充(可选)
如果ID需要用户输入,可在布局中添加EditText:
<EditText android:id="@+id/etId" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="输入ID" android:inputType="number"/>
然后在Java代码中初始化并获取值:
EditText etId = findViewById(R.id.etId); String id = etId.getText().toString().trim(); // 可选:添加空值判断 if (id.isEmpty()) { Toast.makeText(this, "请输入ID", Toast.LENGTH_SHORT).show(); return; }
内容的提问来源于stack exchange,提问作者Reborn
相关产品推荐
相关产品推荐

