安卓开发数据可视化---导入数据到excel表格
现在是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 private 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 @Override
18 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 public static 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/0
6 return sd.canWrite();
7 } else {
8 return false;
9 }
② 获取 /storage/emulated/0(类似上面)
1 public String getSDPath() {
2 File sdDir = null;
3 //判断sd卡是否存在
4 boolean sdCardExist = Environment.getExternalStorageState()
5 .equals(android.os.Environment.MEDIA_MOUNTED);
6 if (sdCardExist) {
7 sdDir = Environment.getExternalStorageDirectory();//获取根目录
8 Log.e("qq", "外部存储可用..." + sdDir.toString());
9 }
10 return sdDir.toString();
11 }
12 //使用
13 private void saveInRoot() {
14 if (getSDPath()!=null) {
15 //String fileName = getSDPath() + "/";
16 //File file = new File(fileName,"123111");//参数
17 //if (!file.mkdir()) {
18 //Toast.makeText(ExternalStoreActivity.this, "目录已存在...", Toast.LENGTH_SHORT).show();
19 //} else {
20 //Toast.makeText(ExternalStoreActivity.this, "创建新目录...", Toast.LENGTH_SHORT).show();
21 //}
22 }
23 }
③获取手机指定目录(也是我用的这一种)
1 public File getAlbumStorageDir(String fileName) {
2 // Get the directory for the user's public pictures directory.
3 //在 Environment.DIRECTORY_DOWNLOADS 目录下创建名为fileName的文件夹 刷新查看
4 File file =
5 new 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.this, "目录已存在...", Toast.LENGTH_SHORT).show();
12 } else {
13 Toast.makeText(ExternalStoreActivity.this, "创建新目录...", Toast.LENGTH_SHORT).show();
14 }
15 return file;
16 }
上述代码来自脚本之家 https://www.jb51.net/article/144850.htm
Tomorrow the birds will sing.
安卓开发数据可视化---导入数据到excel表格的更多相关文章
- 两个不同的账户登录两个浏览器,导入同样的excel表格。数据出现重复
1.场景: 两个不同的账户登录两个浏览器,导入同样的excel表格.业务逻辑已经有验重校验,但数据仍然出现重复,锁定是并发问题导致. 2.参考博客: https://cloud.tencent.com ...
- python 数据可视化 -- 读取数据
从 CSV 文件中读取数据(CSV) import sys import csv # python 内置该模块 支持各种CSV文件 file_name = r"..\ch02_data\ch ...
- sqlloader导出数据和导入数据
分类: Oracle 忙了一天终于把sqlloader导出数据和导入数据弄清楚了,累死俺了... 这个总结主要分为三个大部分,第一部分(实例,主要分两步),第二部分(参数小总结),第三部分(完全参数总 ...
- oracle中使用impdp数据泵导入数据提示“ORA-31684:对象类型已经存在”错误的解决
转载请注明出处:http://blog.csdn.net/dongdong9223/article/details/47448751 本文出自[我是干勾鱼的博客] oracle中使用impdp数据泵导 ...
- Webservice WCF WebApi 前端数据可视化 前端数据可视化 C# asp.net PhoneGap html5 C# Where 网站分布式开发简介 EntityFramework Core依赖注入上下文方式不同造成内存泄漏了解一下? SQL Server之深入理解STUFF 你必须知道的EntityFramework 6.x和EntityFramework Cor
Webservice WCF WebApi 注明:改编加组合 在.net平台下,有大量的技术让你创建一个HTTP服务,像Web Service,WCF,现在又出了Web API.在.net平台下, ...
- R—读取数据(导入csv,txt,excel文件)
导入CSV.TXT文件 read.table函数:read.table函数以数据框的格式读入数据,所以适合读取混合模式的数据,但是要求每列的数据数据类型相同. read.table读取数据非常方便,通 ...
- 吴裕雄--天生自然 R语言开发学习:导入数据
2.3.6 导入 SPSS 数据 IBM SPSS数据集可以通过foreign包中的函数read.spss()导入到R中,也可以使用Hmisc 包中的spss.get()函数.函数spss.get() ...
- 可视化漂亮大屏Excel表格模板 Excel漂亮美观看板 excel电视看板 excel精美数据展示看板
企业管理者喜欢大屏看板主要是因为它可以提供以下几个方面的优势: 增强企业形象:大屏看板可以将企业的信息和广告以更加生动.直观的方式呈现出来,提高企业形象和知名度. 提高工作效率:大屏看板可以在企业内部 ...
- SQL Server 2008 导出数据与导入数据任务介绍
一. 实例数据库介绍 源数据库Test_Other_DB:存在tb_Class,tb_Student,tb_TestTable三张表. 目标数据库TestDB_Output:空库,不含任何表. 二. ...
- MySQL导出数据,并转存到Excel表格中
从数据库中导出数据的方法,这里就不提了,网上有很多方法,如果闲麻烦,可以看一下这个:mysql导出数据 其实使用最简单的下面这个语句: mysql > select * from demo in ...
随机推荐
- Go微服务框架go-kratos实战学习07:consul 作为服务注册和发现中心
一.Consul 简介 consul 是什么 HashiCorp Consul 是一种服务网络解决方案,它能够管理服务之间以及跨本地和多云环境和运行时的安全网络连接.Consul 它能提供服务发现.服 ...
- centos7 安装vmware tool 遇到遇到 kernel-headers 问题修复
安装 vmware tool 步骤 1. cp VMwareTools-10.3.25-20206839.tar.gz 到 用户目录下 2. tar zxf VMwareTools-10.3.25-2 ...
- 以二进制文件安装K8S之环境准备
为了k8s集群能正常运行,需要先完成4项准备工作: 1.关闭防火墙 2.禁用SeLinux 3.关闭Swap 4.安装Docker 关闭防火墙 # 查看防火墙状态 getenforce #关闭防火墙, ...
- Unity学习笔记--数据持久化XML文件(1)
XML相关 Xml是可拓展标记语言,一种文件格式.我们使用xml来完成对数据持久化的存储.等待我们有一程序运行结束之后,将内存中的数据进行保存,(保存在硬盘/服务器)实现对数据的持久化存储. xml文 ...
- h5页面在微信打开,ios底部存在返回横条的问题
我的问题比较简单,一个处理链接的页面,二次跳转进入真正的页面,导致ios出现返回横条,点击后退回到了处理链接页面.因为这个后退不会重新加载,导致一直处在处理链接的这个空页面. 所以我用replace代 ...
- 公司官网建站笔记(二):在云服务器部署PHP服务(公网访问首页)
前言 上一篇重新安装了CentOS8.2之后,接下来开始安装部署PHP服务器,让公网可以访问到我们部署的PHP服务器首页. 背景 为什么自行搭建,是因为红胖子专业做相关Qt软件以及终端设备 ...
- NodeJS开启GZIP功能
gzip是用于压缩,效果特别好,js.css等文件的压缩率一般高达70% 具体方法如下: 先安装一个依赖 npm install compression --save 然后在已有代码里(一般是app. ...
- Centos系统下,各种服务重启
1.sudo systemctl start firewalld 2../redis-server /usr/local/bin/redis.conf 3.mongod -f /etc/mongod ...
- CSRF(Steam的链接不用随便点)
漏洞详解 CSRF 漏洞原理: 攻击者会冒充或利用用户本人对web服务器发送请求,然而web服务器无法识别该请求是否为用户本人所发送,因此造成各种危害. 漏洞利用过程: 1)首先需要用户登录了上网站, ...
- Java --- 多线程 创建线程的方式四: 使用线程池
1 package bytezero.thread2; 2 3 import java.security.Provider; 4 import java.util.concurrent.Executo ...