【问题标题】:Base64 support for different API levels对不同 API 级别的 Base64 支持
【发布时间】:2017-11-22 09:45:57
【问题描述】:

在我的 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 级别并像之前 24 一样使用 Base64 呢?

【问题讨论】:

  • 您使用的导入语句是什么?
  • 导入 java.util.*
  • java.util.Base64 有解码功能,android.util.Base64 有解码功能,从API 8 开始存在

标签: android base64 kotlin


【解决方案1】:

使用 android.util.Base64 将解决您的问题,它可从 API 8 获得

data = android.util.Base64.decode(str, android.util.Base64.DEFAULT);

示例用法:

Log.i(TAG, "data: " + new String(data));

【讨论】:

  • 正确答案!!
  • 你是最棒的!!!!你不知道我花了多少时间搜索正确的问题!!!!!!
【解决方案2】:
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】:

    您应该使用 android.util.Base64 类。从 API 8 开始支持,

    Base64.getDecoder() 函数是 java.util.Base64 的一部分,是 Java8 中的新功能。

    【讨论】:

      【解决方案4】:
      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;
          }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-04-10
        • 2013-12-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多