【Android】Annotation 註解 自定義實現 MD5 功能
Android Annotation是一種框架,用於快速構建Android應用程式。
它使用註釋來定義模型,控制器,視圖和路由,然後生成高質量的代碼以避免與特定的技術細節的重復捲積。
Android Annotation的優點在於其低耦合,有助於開發人員更快速,更有效地處理像UI控制項和數據模型等功能。它不但可以大大縮短開發時間,而且可以確保產品質量。
文章目錄
- 創建 Annotation
- 添加 MD5 工具類
- 創建 Annotation 實現的方法
- 使用 Annotation 的Model
- 程式碼範例
- 效果展示
- Github
1.創建 Annotation
SerializedEncryption
@Retention(AnnotationRetention.RUNTIME)
@Target(AnnotationTarget.FIELD)
annotation class SerializedEncryption(
val type: String = "Base64"
)
2.添加 MD5 工具類
object MDUtil {
fun encode(type: Type, data: String): String {
return try {
val digest = MessageDigest.getInstance(type.value)
digest.update(data.toByteArray())
//32位補0
String.format("%032X", BigInteger(1, digest.digest()))
} catch (e: Exception) {
data
}
}
enum class Type(val value: String) {
MD5("MD5"), SHA256("SHA-256"), SHA512("SHA-512");
}
}
3.創建 Annotation 實現的方法
object SerializedUtil {
fun convertToRequestContent(model: Any?, field: Field): Array<Any>? {
val key = field.name
val originalValue = field[model]
if (TextUtils.isEmpty(key) || originalValue == null) {
return null
}
return if (originalValue is File) {
arrayOf(key, originalValue)
} else {
var value = originalValue.toString()
val serializedEncryption = field.getAnnotation(SerializedEncryption::class.java)
if (null != serializedEncryption) {
value = when (serializedEncryption.type) {
"MD5" -> {
MDUtil.encode(MDUtil.Type.MD5, value).uppercase(Locale.getDefault())
}
"SHA256" -> {
MDUtil.encode(MDUtil.Type.SHA256, value).uppercase(Locale.getDefault())
}
"SHA512" -> {
MDUtil.encode(MDUtil.Type.SHA512, value).uppercase(Locale.getDefault())
}
else -> {
android.util.Base64.encodeToString(value.toByteArray(), android.util.Base64.DEFAULT)
}
}
}
arrayOf(key, value)
}
}
}
4.使用 Annotation 的 Model
data class Data(
@SerializedEncryption(type = "SHA512")
val sha512: String,
@SerializedEncryption(type = "SHA256")
val sha256: String,
@SerializedEncryption(type = "MD5")
val md5: String,
@SerializedEncryption
val base64: String
)
5.程式碼範例
class MainActivity : AppCompatActivity() {
private lateinit var binding: ActivityMainBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
binding = DataBindingUtil.setContentView(this, R.layout.activity_main)
val data = Data("Annotation", "Annotation", "Annotation", "Annotation")
val fields = data.javaClass.declaredFields
Field.setAccessible(fields, true)
for (field in fields) {
val result = SerializedUtil.convertToRequestContent(data, field)
result?.apply {
Log.e(MainActivity::class.java.simpleName, get(0).toString() + " : " + get(1).toString())
}
}
}
}
6.效果展示
7.Github
【Android】Annotation 註解 自定義實現 MD5 功能 Github