在我的Android应用中
的build.gradle
android {
compileSdkVersion 27
defaultConfig {
minSdkVersion 16
targetSdkVersion 27
...
}
....
}
Kotlin代码
val data = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
Base64.getDecoder().decode(str)
} else {
Base64.decode(str, Base64.DEFAULT) // Unresolved reference: decode
}
显然,在API 24之前使用Base64变种时,我遇到了编译错误。
但是我怎样才能支持所有的API级别并像以前一样使用Base64?
答案 0 :(得分:48)
使用 android.util.Base64
将解决您在API 8中提供的问题
data = android.util.Base64.decode(str, android.util.Base64.DEFAULT);
使用示例:
Log.i(TAG, "data: " + new String(data));
答案 1 :(得分:3)
您应该使用 android.util.Base64 类。它受API 8支持,
Base64.getDecoder()函数是java.util.Base64的一部分,是Java8中的新函数。
答案 2 :(得分:1)
fun String.toBase64(): String {
return String(
android.util.Base64.encode(this.toByteArray(), android.util.Base64.DEFAULT),
StandardCharsets.UTF_8
)
}
fun String.fromBase64(): String {
return String(
android.util.Base64.decode(this, android.util.Base64.DEFAULT),
StandardCharsets.UTF_8
)
}
答案 3 :(得分:0)
private String encodeFromImage() {
String encode = null;
if (imageView.getVisibility() == View.VISIBLE) {
Bitmap bitmap = ((BitmapDrawable) imageView.getDrawable()).getBitmap();
ByteArrayOutputStream stream = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.PNG, 100, stream);
//encode = Base64.encodeToString(stream.toByteArray(), Base64.DEFAULT);
//String path = MediaStore.Images.Media.insertImage(getContentResolver(), bitmap,"Title",null);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
encode = Base64.getEncoder().encodeToString(stream.toByteArray());
} else {
encode = android.util.Base64.encodeToString(stream.toByteArray(), android.util.Base64.DEFAULT);
}
}
return encode;
}