Base64支持不同的API级别

时间:2017-11-22 09:45:58

标签: android base64 kotlin

在我的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?

4 个答案:

答案 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;
    }