Android(安卓)选择文件并加载数据到界面
16lz
2021-01-24
1.跳转到选择文件界面
Intent intent = new Intent(Intent.ACTION_GET_CONTENT); intent.setType("*/*"); intent.addCategory(Intent.CATEGORY_OPENABLE); startActivityForResult(intent, 1);
2.重写选择文件后的回调(这里只读excel文件)
@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (resultCode == Activity.RESULT_OK) { if (requestCode == 1) { String path; Uri uri = data.getData(); if ("file".equalsIgnoreCase(uri.getScheme())) {//使用第三方应用打开 path = uri.getPath();// Toast.makeText(this, path , Toast.LENGTH_SHORT).show(); return; } if (Build.VERSION.SDK_INT > Build.VERSION_CODES.KITKAT) {//4.4以后 path = Util.getPath(this, uri);// Toast.makeText(this, path, Toast.LENGTH_SHORT).show(); } else {//4.4以下下系统调用方法 path = Util.getRealPathFromURI(uri,TagSearchActivity.this);// Toast.makeText(VisitorInfoAddActivity.this, path , Toast.LENGTH_SHORT).show(); } if(path==null||path.isEmpty()||!path.endsWith("xls") ){ Toast.makeText(TagSearchActivity.this,"请选择Excel文件",Toast.LENGTH_SHORT); return; }else{ epcList=new ArrayList<>(); tagAdapter.reSet(epcList); //开Task读文件 String[] args=new String[1]; args[0]=path; frt=new FileReaderTask(); frt.execute(args); } } } }
3.编写FileReaderTask内部类读取文件
class FileReaderTask extends AsyncTask<String, Integer, List<String>> { private static final int SUCESS = 0; //成功 private static final int FAIL = -1; //文件打开失败 private static final int File_TYPE_OTHER =-1; //XLS 文件 private static final int File_TYPE_XLS =1; //XLS 文件 private static final int File_TYPE_XLSX =2; //XLSx 文件 private int status=SUCESS; //当前状态,执行过程中随时更新 private String msg=""; //错误信息 StringBuilder warnInfo=new StringBuilder() ; //提示信息 @Override protected void onPreExecute() { super.onPreExecute(); loadingDialog.show(); isReading=true; } @Override protected List<String> doInBackground(String... paths) { List<String> ret=new ArrayList<>(); int fileType=File_TYPE_OTHER; //当前文件类型 try { Workbook workbook = Workbook.getWorkbook(new File(paths[0])); Sheet rs = workbook.getSheet(0); int rowsCount = rs.getRows();//总行数 for (int r = 0; r < rowsCount; r++) { Cell c = rs.getCell(0, r); String epc = c.getContents(); if(epc.equals("")){ continue; } if(ret.contains(epc)){ warnInfo.append("已合并多条数据:"+epc+"\n"); continue; } ret.add(epc); } return ret; }catch(BiffException e){ status=FAIL; msg="仅支持97-03 xls格式的Excel"; return new ArrayList<>(); }catch (Exception e){ status=FAIL; msg=e.getMessage(); return new ArrayList<>(); }finally{// if(stream!=null)try{stream.close();}catch(Exception e){} } } @Override protected void onCancelled(List<String> visitors) { } @Override protected void onPostExecute(List<String> ret) { if(loadingDialog.isShowing()){ loadingDialog.dismiss(); } isReading=false; if(isCancelled()==false) { if (status != SUCESS) { //处理失败 Toast.makeText(getApplicationContext(), msg, Toast.LENGTH_SHORT).show(); } else { epcList=ret; tagAdapter.reSet(epcList); if (warnInfo.length() > 0) { showWarn(warnInfo.toString()); } } } } };
4.在手机默认自动旋转模式下,从文件中读取数据并加载到页面后,横置手机后,页面也横置了,然后数据消失了。只需在AndroidManifest.xml添加如下代码可解决
为什么会出现这种情况呢?
页面横置后,Android会默认重新调用Activity的onCreate方法,如果你的onCreate方法里修改了tagList集合,就会出现横置页面后,数据丢失的现象了,代码
android:windowSoftInputMode="adjustResize|stateHidden"
就是控制页面横置后不重新调用onCreate方法
参考:Android 设定横屏,禁止屏幕旋转,Activity重置
https://blog.csdn.net/u012364372/article/details/51088831/
更多相关文章
- Android中几种图片特效的处理的实现方法
- Android实现自动轮播图效果
- 【Android小经验】 ListView列中的一个ITEM值
- Android(安卓)去掉title bar的3个方法
- Android利用ViewFlipper实现屏幕切换动画效果(下)
- Android(安卓)widget 之RemoteView
- Android记录2013年10月20日
- android 设置开机不自动进入锁屏状态