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

【报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新机型都有这个问题

小权

小权

同问

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