我正在尝试使用http://developer.android.com/reference/android/util/Base64.html类在Android中解码Base64编码字符串。
encodeToString和decode方法都返回空值,我不知道是哪里出了问题,下面是我的解码代码:
// Should decode to "GRC"
String friendlyNameBase64Encoded = "R1JD";
// This returns null
byte[] friendlyNameByteArray = Base64.decode(friendlyNameBase64Encoded, Base64.DEFAULT);
// Fails with NullPointerException
String friendlyName = new String(friendlyNameByteArray, "UTF-8");
我运行的是Android API 23.1.0
6条答案
按热度按时间rqqzpn5f1#
我在单元测试中也遇到了同样的问题。我没有意识到我使用的Base64类是Android API的一部分,因此
您不能在常规JUnit测试中使用android.util.Base64,它必须是一个工具测试。
但是,如果您真的希望将其作为单元测试,您可以使用Apache Commons Base64类。
用法稍有不同,
zed5wv102#
你可以用机器人跑步机
1.在
build.gradle
中添加依赖项:1.在测试类中添加以下行:
0g0grzrc3#
跟进o android教程和单元测试说明,而你只需要单元测试,而不需要使用一些android库
在你的情况下,你依赖于android.Base64。我有类似的问题,移动测试类从
src/test
-〉src/androidTest
工作。这些测试运行在虚拟机或真实的的android设备。我没有注意到差异,在第一眼。zrfyljdw4#
如前所述,由于构建文件中的此设置,android.util.Base64.decode将在测试工具中返回空值:
为了避免包含其他库,您可以使用java.util.Base64,它只在Java8和Android 26及更高版本中可用。如果您已经针对26以上版本,则只需切换到此方法,但如果您必须针对更早版本的SDK,则可以检查是否返回空值,并调用test-harness方法:
我宁愿这样做,也不愿引入额外的库依赖项,但是YMMV。
sg3maiej5#
我的工作方式是使用mockk来模拟Base64.decode方法
8i9zcol26#
我最终做的是一个 Package 器。我允许android.util.Base64失败,然后如果我们在构建大于“O”或等于0(零。意味着不是Android设备或没有Android SDK版本)。