diff --git a/CloudKey/app/src/main/java/com/thankvinci/CloudKey/Files/FileAdapter.java b/CloudKey/app/src/main/java/com/thankvinci/CloudKey/Files/FileAdapter.java index a8ce379..53056af 100644 --- a/CloudKey/app/src/main/java/com/thankvinci/CloudKey/Files/FileAdapter.java +++ b/CloudKey/app/src/main/java/com/thankvinci/CloudKey/Files/FileAdapter.java @@ -70,27 +70,26 @@ public class FileAdapter extends RecyclerView.Adapter { Navigation.findNavController(v).navigate(R.id.action_openDir,data); }else{ //Toast.makeText(v.getContext(),fitem.getName()+" "+fitem.isCompress(),Toast.LENGTH_SHORT).show(); + String srcFile = builder.toString(); + String desPath = srcFile.substring(0,builder.toString().lastIndexOf(".")); if (fitem.isCompress()){ - UnzipDialogFragment unzipDialog = new UnzipDialogFragment(); - unzipDialog.setListener(new UnzipDialogFragment.UnzipDialogListener() { - @Override - public void onDialogUnzipClicked() { - Toast.makeText(v.getContext(),"打开",Toast.LENGTH_SHORT).show(); - } - }); - String srcFile = builder.toString(); - String desPath = srcFile.substring(0,builder.toString().lastIndexOf(".")); + if(FileUtils.isValidZipFile(srcFile)){ + UnzipDialogFragment unzipDialog = new UnzipDialogFragment(); + unzipDialog.setListener(new UnzipDialogFragment.UnzipDialogListener() { + @Override + public void onDialogUnzipClicked() { + //Toast.makeText(v.getContext(),"打开一个Dialog",Toast.LENGTH_SHORT).show(); + } + }); + Bundle data = new Bundle(); + data.putString("srcFile",srcFile); + data.putString("desPath",desPath); + unzipDialog.setArguments(data); - Bundle data = new Bundle(); - data.putString("srcFile",srcFile); - data.putString("desPath",desPath); - unzipDialog.setArguments(data); - - unzipDialog.show(((MainActivity)v.getContext()).getSupportFragmentManager(),"unzip"); - //FileHandler fileHandler = new FileHandler((MainActivity)v.getContext()); - //Thread ft = new Thread(new FileThread(fileHandler,,,"12341234",FileThread.FUNCTION_DECOMPRESS)); - //ft.start(); - //Toast.makeText(v.getContext(),"线程正在处理,请稍后",Toast.LENGTH_LONG).show(); + unzipDialog.show(((MainActivity)v.getContext()).getSupportFragmentManager(),"unzip"); + }else{ + Toast.makeText(v.getContext(),"压缩包已损坏或者格式不合法",Toast.LENGTH_SHORT).show(); + } }else{ Toast.makeText(v.getContext(),"本软件暂时只支持zip解压",Toast.LENGTH_SHORT).show(); } diff --git a/CloudKey/app/src/main/java/com/thankvinci/CloudKey/Files/FileUtils.java b/CloudKey/app/src/main/java/com/thankvinci/CloudKey/Files/FileUtils.java index a9f6b52..e7a69b8 100644 --- a/CloudKey/app/src/main/java/com/thankvinci/CloudKey/Files/FileUtils.java +++ b/CloudKey/app/src/main/java/com/thankvinci/CloudKey/Files/FileUtils.java @@ -66,4 +66,8 @@ public class FileUtils { Log.d("TAG:",zipFile.getFile().getName()); zipFile.extractAll(desPath); } + public static boolean isValidZipFile(String srcFile){ + ZipFile zipFile = new ZipFile(srcFile); + return zipFile.isValidZipFile(); + } } diff --git a/CloudKey/app/src/main/java/com/thankvinci/CloudKey/Fragment/BugSubFragment.java b/CloudKey/app/src/main/java/com/thankvinci/CloudKey/Fragment/BugSubFragment.java index c63cdb4..5281cbf 100644 --- a/CloudKey/app/src/main/java/com/thankvinci/CloudKey/Fragment/BugSubFragment.java +++ b/CloudKey/app/src/main/java/com/thankvinci/CloudKey/Fragment/BugSubFragment.java @@ -45,16 +45,7 @@ public class BugSubFragment extends Fragment { Toast.makeText(getActivity(),"一定要全部填写完才能提交哦~",Toast.LENGTH_SHORT).show(); return ; } - Handler handler = new NetHandler(getActivity(),fragment){ - public void handleMessage(Message msg) { - super.handleMessage(msg); - switch (msg.what){ - case -1: - Toast.makeText(getActivity(),msg.getData().getString("ReturnData"),Toast.LENGTH_SHORT).show(); - break; - } - } - }; + Handler handler = new NetHandler(getActivity(),fragment); StringBuilder builder = new StringBuilder(); builder.append("http://1.14.144.194:8080/cscp/cscp?para0=subBug¶1="); builder.append(softVer); diff --git a/CloudKey/app/src/main/java/com/thankvinci/CloudKey/Fragment/UnzipDialogFragment.java b/CloudKey/app/src/main/java/com/thankvinci/CloudKey/Fragment/UnzipDialogFragment.java index fb2bcda..0968366 100644 --- a/CloudKey/app/src/main/java/com/thankvinci/CloudKey/Fragment/UnzipDialogFragment.java +++ b/CloudKey/app/src/main/java/com/thankvinci/CloudKey/Fragment/UnzipDialogFragment.java @@ -55,6 +55,11 @@ public class UnzipDialogFragment extends DialogFragment { desPath = getArguments().getString("desPath"); passwd = getArguments().getString("passwd"); fragment = this; + //获取MD5码 + Handler handler = new FileHandler(getActivity(),fragment); + Toast.makeText(getActivity(),"正在获取文件MD5码,可能需要花点时间,这取决于您手机的性能",Toast.LENGTH_SHORT).show(); + Thread ft = new Thread(new FileThread(handler,srcFile,desPath,null,FileHandler.FUNCTION_GET_MD5)); + ft.start(); } public void setListener(UnzipDialogListener listener){ this.listener = listener; @@ -86,6 +91,7 @@ public class UnzipDialogFragment extends DialogFragment { fromSQL = false; successful = false; + passwd_edit.setOnClickListener(new View.OnClickListener() { @RequiresApi(api = Build.VERSION_CODES.O) @Override @@ -110,23 +116,23 @@ public class UnzipDialogFragment extends DialogFragment { @Override public void onClick(View v) { if (acceptPWD2SQL.isChecked()){ - Toast.makeText(getActivity(),"勾选同意",Toast.LENGTH_SHORT).show(); - //网络线程 + //Toast.makeText(getActivity(),"勾选同意",Toast.LENGTH_SHORT).show(); }else{ - Toast.makeText(getActivity(),"取消勾选",Toast.LENGTH_SHORT).show(); + //Toast.makeText(getActivity(),"取消勾选",Toast.LENGTH_SHORT).show(); } } }); getPWD.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - //网络线程 - Toast.makeText(getActivity(),"获取密码",Toast.LENGTH_SHORT).show(); - //获取MD5码 - Handler handler = new FileHandler(getActivity(),fragment); - Thread ft = new Thread(new FileThread(handler,srcFile,desPath,null,FileHandler.FUNCTION_GET_MD5)); - ft.start(); - + //获取密码 + StringBuilder builder = new StringBuilder(); + builder.append("http://1.14.144.194:8080/cscp/cscp?para0=query¶1="); + builder.append(md5); + String url = builder.toString(); + Handler handler = new NetHandler(getActivity(),fragment); + Thread nt = new Thread(new NetThread(handler,url)); + nt.start(); } }); @@ -138,11 +144,7 @@ public class UnzipDialogFragment extends DialogFragment { Thread ft = new Thread(new FileThread(fHandler,srcFile,desPath,passwd,FileHandler.FUNCTION_DECOMPRESS)); ft.start(); if (acceptPWD2SQL.isChecked() && !fromSQL){ - //StringBuilder builder = new StringBuilder(); - //builder.append("http://1.14.144.194:8080/cscp/cscp?para0=query¶1="); - //builder.append(md5) - //Handler handler = new NetHandler(getActivity(),fragment); - //Thread nt = new Thread(new NetThread(handler)); + } listener.onDialogUnzipClicked(); } @@ -171,4 +173,22 @@ public class UnzipDialogFragment extends DialogFragment { public void setSuccessful(boolean successful){ this.successful = successful; } + public String getMD5(){ + return md5_edit.getText().toString(); + } + public String getPasswd(){ + return passwd_edit.getText().toString(); + } + public boolean getFromSQL(){ + return fromSQL; + } + public boolean getSuccessful(){ + return successful; + } + public boolean getCheck(){ + return acceptPWD2SQL.isChecked(); + } + public boolean pwdIsEmpty(){ + return "".equals(getPasswd()); + } } diff --git a/CloudKey/app/src/main/java/com/thankvinci/CloudKey/NetUtils/NetThread.java b/CloudKey/app/src/main/java/com/thankvinci/CloudKey/NetUtils/NetThread.java index e739c1c..643c559 100644 --- a/CloudKey/app/src/main/java/com/thankvinci/CloudKey/NetUtils/NetThread.java +++ b/CloudKey/app/src/main/java/com/thankvinci/CloudKey/NetUtils/NetThread.java @@ -31,7 +31,7 @@ public class NetThread implements Runnable { Message msg = new Message(); String data = getNetWork(strUrl);Log.d("TAG:",data); Bundle dataPackage = new Bundle(); - if (data.equals("查无结果") || data.equals("反馈成功,感谢支持") || data.equals("反馈失败,请稍后重试") || data.equals("查询失败") || data.equals("插入失败") || data.equals("无效参数")){ + if (data.equals("查无结果") || data.equals("反馈成功,感谢支持") || data.equals("反馈失败,请稍后重试") || data.equals("查询失败") || data.equals("插入成功,感谢分享") || data.equals("插入失败") || data.equals("无效参数")){ msg.what = -1; dataPackage.putString("ReturnData",data); msg.setData(dataPackage); diff --git a/CloudKey/app/src/main/java/com/thankvinci/CloudKey/Utils/FileHandler.java b/CloudKey/app/src/main/java/com/thankvinci/CloudKey/Utils/FileHandler.java index a25026a..338e82f 100644 --- a/CloudKey/app/src/main/java/com/thankvinci/CloudKey/Utils/FileHandler.java +++ b/CloudKey/app/src/main/java/com/thankvinci/CloudKey/Utils/FileHandler.java @@ -14,6 +14,7 @@ import com.thankvinci.CloudKey.NetUtils.NetThread; public class FileHandler extends Handler { //定义功能选择的常量 获取MD5和解压 public final static int FUNCTION_GET_MD5 = 0; + public final static int FUNCTION_GET_PWD = 2; public final static int FUNCTION_DECOMPRESS = 1; public final static int ERROR = -1; @@ -30,17 +31,25 @@ public class FileHandler extends Handler { switch (msg.what){ case FUNCTION_GET_MD5: ((UnzipDialogFragment)fragment).setMD5(msg.getData().getString("md5")); - //获取文件密码 - StringBuilder builder = new StringBuilder(); - builder.append("http://1.14.144.194:8080/cscp/cscp?para0=query¶1="); - builder.append(msg.getData().getString("md5")); - String url = builder.toString(); - Handler handler = new NetHandler(activity,fragment); - Thread nt = new Thread(new NetThread(handler,url)); - nt.start(); break; case ERROR: Toast.makeText(activity,msg.getData().getString("error"),Toast.LENGTH_SHORT).show(); + break; + case FUNCTION_DECOMPRESS: + ((UnzipDialogFragment)fragment).setSuccessful(msg.getData().getBoolean("successful")); + //当dialog的checkbox为选中时并且密码来源不是数据库时再并且解压成功时再并且密码输入框不为空时,即用户同意输入解压密码解压成功后把密码上传到数据库 + if(((UnzipDialogFragment)fragment).getCheck() && !((UnzipDialogFragment)fragment).getFromSQL() && ((UnzipDialogFragment)fragment).getSuccessful() && !((UnzipDialogFragment)fragment).pwdIsEmpty()){ + StringBuilder builder = new StringBuilder(); + builder.append("http://1.14.144.194:8080/cscp/cscp?para0=update¶1="); + builder.append(((UnzipDialogFragment)fragment).getMD5()); + builder.append("¶2="); + builder.append(((UnzipDialogFragment)fragment).getPasswd()); + Handler handler = new NetHandler(activity,fragment); + Thread nt = new Thread(new NetThread(handler,builder.toString())); + nt.start(); + } + + break; } } } diff --git a/CloudKey/app/src/main/java/com/thankvinci/CloudKey/Utils/FileThread.java b/CloudKey/app/src/main/java/com/thankvinci/CloudKey/Utils/FileThread.java index 43dbc7a..2f973be 100644 --- a/CloudKey/app/src/main/java/com/thankvinci/CloudKey/Utils/FileThread.java +++ b/CloudKey/app/src/main/java/com/thankvinci/CloudKey/Utils/FileThread.java @@ -15,6 +15,7 @@ import java.io.IOException; public class FileThread implements Runnable{ public final static int FUNCTION_GET_MD5 = 0; + public final static int FUNCTION_GET_PWD = 2; public final static int FUNCTION_DECOMPRESS = 1; public final static int ERROR = -1; @@ -49,12 +50,22 @@ public class FileThread implements Runnable{ case FUNCTION_DECOMPRESS: try { FileUtils.unzip(srcFile,desPath,passwd,handler); + Log.d("TAG:","解压完成"); + md5 = FileUtils.getFileMD5(srcFile); + data.putString("md5",md5); + msg.what = FUNCTION_GET_MD5; + data.putBoolean("successful",true); + msg.what = FUNCTION_DECOMPRESS; + msg.setData(data); + handler.sendMessage(msg); } catch (ZipException e) { e.printStackTrace(); data.putString("error","解压失败"); msg.what = ERROR; msg.setData(data); handler.sendMessage(msg); + } catch (IOException e) { + e.printStackTrace(); } break; default: break; diff --git a/开发历程.md b/开发历程.md index 453dbe2..fa00752 100644 --- a/开发历程.md +++ b/开发历程.md @@ -287,4 +287,13 @@ FileHandler负责将获取到的md5码发到NetThread,然后将得到的密码 **2021/6/13** -实现了解压文件检测压缩文件是否损坏和(因为密码错误)解压失败,都是ZipException,所以都弹出解压失败,压缩文件损坏多弹一个异常 \ No newline at end of file +实现了解压文件检测压缩文件是否损坏和(因为密码错误)解压失败,都是ZipException,所以都弹出解压失败,压缩文件损坏多弹一个Toast + +**2021/6/13** + +修改为点击zip文件就识别是否为有效zip,不是的话只会弹出一个Toast,是的话才有Dialog,因为要点开就加载md5码,就不加载又大又没有效果的文件md5了 + +注释和删除了一些测试时用的Toast和Log + +实现了当用户勾选同意上传密码并且输入密码解压成功后,把密码和文件md5码一起传入数据库 +