4***@qq.com
4***@qq.com
  • 发布:2019-09-17 11:59
  • 更新:2020-04-13 18:48
  • 阅读:1583

【报Bug】android.util.Base64.decode 在部分机型中返回NULL

分类:Native.js

详细问题描述

(DCloud产品不会有明显的bug,所以你遇到的问题大都是在特定环境下才能重现的问题,请仔细描述你的环境和重现方式,否则DCloud很难排查解决你的问题)

[内容]

重现步骤

[步骤]
var Base64 = plus.android.importClass("android.util.Base64");
var bytes = Base64.decode(base64Str, Base64.DEFAULT);
以上是关键代码
下面为全部代码

  
commonApi.downLoad({  
				id: data.id  
			}, function(res, status, jqXHR) {  
				// console.log(JSON.stringify(data))  
				// var audioName = jqXHR.getResponseHeader("filename");  
				var audioName = data.fileName;  
				var reader = new FileReader();  
				reader.readAsDataURL(res);  
				reader.onloadend = function() {  
					var base64 = reader.result;  
					var base64Str = base64.substring(base64.indexOf(',') + 1);  
					plus.io.requestFileSystem(plus.io.PRIVATE_DOC, function(fs) {  
						fs.root.getFile(audioName, {  
							create: true  
						}, function(entry) {  
							// 获得平台绝对路径    
							var fullPath = entry.fullPath;  
							// console.log(fullPath);  
							if (mui.os.android) {    
								var Base64 = plus.android.importClass("android.util.Base64");  
								var FileOutputStream = plus.android.importClass("java.io.FileOutputStream");  
								try {  
									var out = new FileOutputStream(fullPath);  
									var bytes = Base64.decode(base64Str, Base64.DEFAULT);  
									out.write(bytes);  
									out.close();  
									// 回调    
									self.openWPS(fullPath);  
								} catch (e) {  
									console.log(e);  
								}  
							} else if (mui.os.ios) {  
								var NSData = plus.ios.importClass('NSData');  
								var nsData = new NSData();  
								nsData = nsData.initWithBase64EncodedStringoptions(base64Str, 0);  
								if (nsData) {  
									nsData.plusCallMethod({  
										writeToFile: fullPath,  
										atomically: true  
									});  
									plus.ios.deleteObject(nsData);  
								}  
								// 回调    
								self.openWPS(fullPath);  
							}  
						})  
					})  
				}  
			});  

就是根据下载得到的文件流转换成编码流,然后生成本地IO文件,再然后截取掉了头部进行一个写入,问题就是在写入的时候bytes为null的时候什么也写入不了,抛出异常为 java.lang.NullPointerException: Attempt to get length of null array;at java.io.FileOutputStream.write
[结果]
大部分机型bytes 是NULL
[期望]
bytes 是非NULL值
[如果语言难以表述清晰,拍一个视频或截图,有图有真相]

IDE运行环境说明

[HBuilder 或 HBuilderX。如果你用其他工具开发uni-app,也需要在此说明]
使用的是hbuilderX 版本
[IDE版本号]

[windows版本号]
win10系统64位
[mac版本号]

uni-app运行环境说明

[运行端是h5或app或某个小程序?]

运行端是APP 使用的是hbuilderX的基座

[运行端版本号]

最新版本

[项目是cli创建的还是HBuilderX创建的?如果是cli创建的,请更新到最新版cli再试]

[编译模式是老模板模式还是新的自定义组件模式?]

App运行环境说明

[Android版本号]

不返回null的版本Android版本号是6.0
返回null的版本Android版本号是8.1.0 华为
[iOS版本号]

[手机型号]

oppo A57 HUAWE 华为荣耀8C 魅族5 魅族6 红米 小米mix2

[模拟器型号]

附件

[IDE问题请提供HBuilderX运行日志。菜单帮助-查看运行日志,点右键打开文件所在目录,将log文件压缩成zip包上传]

[App问题请提供可重现问题的代码片段,你补充的细一点,问题就解决的快一点]

[App安装包或H5地址]

[可重现代码片段]

联系方式 411982247@qq.com

[QQ] 411982247

2019-09-17 11:59 负责人:无 分享
已邀请:
第九代开发传人

第九代开发传人 - http://www.cnblogs.com/yanbigfeg/

碰到这种问题官方就不搭理了啊!我也遇到了不知道咋办了?也不知道能不能解决。不能解决也不给确定答案真是的

3***@qq.com

3***@qq.com

这个问题官方没回应吗?android新机型都有这个问题

小权

小权

同问

该问题目前已经被锁定, 无法添加新回复