现在是2021-03-12 00::39
刚刚完成了一个小软件部分功能,现在把出现的问题总结如下:
一、首先要下载jar包网址:https://mvnrepository.com/artifact/net.sourceforge.jexcelapi/jxl/2.6.12
把jar包添加到项目库
然后需要在清单文件配置申请访问SD卡的权限信息
<uses-permission androID:name="androID.permission.WRITE_EXTERNAL_STORAGE" tools:node="replace"/>
<uses-permission androID:name="androID.permission.READ_EXTERNAL_STORAGE" tools:node="replace"/>
androID:requestLegacyExternalStorage="true"
这里我出现了一个问题
这个版本的jxl只可以支持解析后缀名为:.xls的文件,而且有一点要特别注意,文件格式的修改最好通过文件另存为的方式修改,
而不要直接在文件名上修改后缀名
这样看起来是对的,其实文件内部结构已经被打乱。那么在调用方法
in=new file(filename);
Workbook workbook = Workbook.getWorkbook(in); 的时候就会出现文件解析异常,这个错误不会在控制台输出,是很隐蔽的错误。
二、软件错误调试
当出现那种运行不报错,数据没有NulL异常的情况时,
可以使用一条语句进行分析,
使用Log.v()方法在控制台输出一句话。
这样就可以知道程序究竟在运行到哪一步出现了问题,导致结果
不是自己想要的。
三、清单文件
清单文件尽量少乱改动,注释也尽量少加,因为一旦出现哪个地方多了个什么符号是很难发现的,而且软件不会飘红报错。
四、获取权限可以有代码来体现
前提是已经导入jar包并且在清单文件完成引用注册
1 //读写权限 2 private static String[] PERMISSIONS_STORAGE = { 3 Manifest.permission.READ_EXTERNAL_STORAGE, 4 Manifest.permission.WRITE_EXTERNAL_STORAGE}; 5 请求状态码 6 static int REQUEST_PERMISSION_CODE = 1; 7 8 写在onCreate() 9 if (Build.VERSION.SDK_INT > Build.VERSION_CODES.LolliPOP) {10 if (ActivityCompat.checkSelfPermission(this,Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {11 ActivityCompat.requestPermissions(this,PERMISSIONS_STORAGE,REQUEST_PERMISSION_CODE);12 }13 }14 这是一个回调方法,在第一次运行安装软件的时候会在控制台输出一句话15 16 回调访问权限17 @OverrIDe18 public voID onRequestPermissionsResult(int requestCode,@NonNull String[] permissions,@NonNull int[] grantResults) {19 super.onRequestPermissionsResult(requestCode,permissions,grantResults);20 if (requestCode == REQUEST_PERMISSION_CODE) {21 for (int i = 0; i < permissions.length; i++) {22 Log.i("MainActivity","申请的权限为:" + permissions[i] + ",申请结果:" + grantResults[i]);23 }24 25 }
五、说一下实现过程中的路径存储问题
因为要获取的是手机存储位置,所以可能不如电脑那么清晰,我的手机是荣耀。
首先我们要清楚一点,就是
file file =
new file(Environment.getExternalStoragePublicDirectory(Environment.
DIRECTORY_DOWNLOADS),"success_0.xls");//参数2是文件名称
下面给出几种方法获取路径
tips:一般手机sd卡路径是 /storage/emulated/0
① 获取 /storage/emulated/0
1 boolean sdCardisAvailable() {2 首先判断外部存储是否可用3 if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {4 file sd = new file(Environment.getExternalStorageDirectory().getPath());5 Log.e("qq","sd = " + sd);sd = /storage/emulated/06 return sd.canWrite();7 } else8 return false9 }
② 获取 /storage/emulated/0(类似上面)
1 public String getSdpath() { 2 file sdDir = null 3 判断sd卡是否存在boolean sdCardExist = Environment.getExternalStorageState() 5 .equals(androID.os.Environment.MEDIA_MOUNTED); 6 (sdCardExist) { 7 sdDir = Environment.getExternalStorageDirectory();获取根目录 8 Log.e("qq","外部存储可用..." + sdDir.toString());}10 sdDir.toString();11 使用voID saveInRoot() {14 if (getSdpath()!=15 String filename = getSdpath() + "/";file file = new file(filename,"123111");参数17 if (!file.mkdir()) {18 Toast.makeText(ExternalStoreActivity.this,"目录已存在...",Toast.LENGTH_SHORT).show();19 } else {20 21 }22 }23 }
③获取手机指定目录(也是我用的这一种)
file getAlbumStorageDir(String filename) { 2 Get the directory for the user's public pictures directory. 3 在 Environment.DIRECTORY_DOWNLOADS 目录下创建名为filename的文件夹 刷新查看 4 file file = 5 file(Environment.getExternalStoragePublicDirectory(Environment. 6 DIRECTORY_DOWNLOADS),filename);参数2是文件名称 7 mkdirs()可以创建多级目录 8 mkdir()只能创建一级目录 9 if (!file.mkdir()) {10 Log.e(LOG_TAG,"Directory not created");11 Toast.makeText(ExternalStoreActivity.12 } 13 Toast.makeText(ExternalStoreActivity.14 15 file;16 }
上述代码来自脚本之家 https://www.jb51.net/article/144850.htm
Tomorrow the birds will sing.
总结以上是内存溢出为你收集整理的安卓开发数据可视化---导入数据到excel表格全部内容,希望文章能够帮你解决安卓开发数据可视化---导入数据到excel表格所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)