Android应用如何生成[日期_序号]格式的递增序列号
Android 实现规则序列号生成方案
实现思路
核心逻辑分为两部分:
- 格式化当前日期为
ddMMyy格式字符串 - 持久化存储上一次生成序列号的日期、当日累计序号,每次生成时做日期比对:
- 若存储的日期与当前日期一致,序号自增1
- 若存储的日期与当前日期不一致,序号重置为1,同时更新存储的日期为当前日期
具体实现代码
我们用Android原生轻量存储SharedPreferences做持久化,不需要额外依赖,适配绝大多数场景:
1. 核心生成逻辑
import android.content.Context; import android.content.SharedPreferences; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Locale; public class SerialGenerator { private static final String PREF_NAME = "serial_config"; private static final String KEY_LAST_DATE = "last_generate_date"; private static final String KEY_CURRENT_SEQ = "current_sequence"; private static final SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("ddMMyy", Locale.getDefault()); // 加 synchronized 避免多线程并发调用生成重复序号 public static synchronized String generateNextSerial(Context context) { SharedPreferences sp = context.getSharedPreferences(PREF_NAME, Context.MODE_PRIVATE); String currentDate = DATE_FORMAT.format(new Date()); // 读取存储的历史数据 String lastDate = sp.getString(KEY_LAST_DATE, ""); int currentSeq = sp.getInt(KEY_CURRENT_SEQ, 0); // 日期比对,更新序号 if (currentDate.equals(lastDate)) { currentSeq++; } else { currentSeq = 1; } // 新数据回写存储 sp.edit() .putString(KEY_LAST_DATE, currentDate) .putInt(KEY_CURRENT_SEQ, currentSeq) .apply(); // 拼接返回最终序列号 return currentDate + "_" + currentSeq; } }
2. 按钮点击调用示例
在Activity/Fragment的按钮点击事件中直接调用即可:
// 按钮点击监听 findViewById(R.id.btn_generate).setOnClickListener(v -> { String serial = SerialGenerator.generateNextSerial(this); // 后续自行处理生成的serial,比如展示到UI、保存到本地等 Log.d("GeneratedSerial", serial); });
注意事项
- 如果需要适配Android 8.0以下版本且不想用
SimpleDateFormat,可以开启核心库 desugar 支持后用LocalDate格式化日期,避免线程安全问题 SharedPreferences存储的数据会在用户清除应用数据、卸载重装时丢失,如果需要序号永久不中断,需要搭配服务端存储做同步- 若有离线多设备生成序列号的需求,建议在规则中补充设备唯一标识前缀,避免跨设备重复
内容的提问来源于stack exchange,提问作者Ayesha Anika
相关产品推荐
相关产品推荐

