为什么单击提交按钮时未打开进度对话框

Why Progress Dialog is not open while clicking on Submit Button

我设置了以太网的IP。在这里,我在特定路径上创建文件和 运行 IP 集的代码,即 sudo。

一切正常,但在单击提交按钮时未显示进度对话框,但 setOnClickListener 中提到的所有其他功能都正常工作。

谁能帮帮我。

 submt.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            validationIP();
            if (var == true) {
                ProgressDialog progressdialog = new ProgressDialog(Third_Ethernet_Layout.this);
                progressdialog.setMessage("Please Wait....");
                progressdialog.show();
                progressdialog.setCancelable(false);
                progressdialog.setCanceledOnTouchOutside(false);
                try {
                    File file = new File(filepath);
                    file.createNewFile();
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                write();
                sudo(ipfetch, netmaskfetch, gatewayfetch, dns1fetch, dns2fetch);
                progressdialog.dismiss();
                finish();
                Toast.makeText(Third_Ethernet_Layout.this, "Ethernet IP Change Successfully", Toast.LENGTH_SHORT).show();
            }
        }
    });

您正在使用 progressdialog.dismiss();,因此关闭了进度对话框。 您应该为此使用异步任务

private class AsyncAboutUs extends AsyncTask<Void, Void, Void> {



        private ProgressDialog progressDialog;

        @Override
        protected void onPreExecute() {
            super.onPreExecute();
        progressdialog = new ProgressDialog(Third_Ethernet_Layout.this);
                progressdialog.setMessage("Please Wait....");
                progressdialog.show();
                progressdialog.setCancelable(false);
                progressdialog.setCanceledOnTouchOutside(false);

        }

        @Override
        protected Void doInBackground(Void... strings) {
           try {
                    File file = new File(filepath);
                    file.createNewFile();
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                write();
                sudo(ipfetch, netmaskfetch, gatewayfetch, dns1fetch, dns2fetch);
return null;
        }

        @Override
        protected void onPostExecute(Void aVoid) {
            super.onPostExecute(aVoid);
            if (!isCancelled()) {
                finish();  
            }
            if (progressDialog != null && progressDialog.isShowing()) {
                progressDialog.dismiss();
            }

        }
    }

ON 按钮点击:

submt.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            validationIP();
            if (var == true) {

                 new AsyncAboutUs().execute();
            }
        }
    });

显示进度对话框的代码工作正常,可能是进程很快,这就是进度对话框不可见的原因。 可以尝试使用线程睡眠来实际查看它是否存在问题。

它确实显示了进度,但您可以通过调用 dismiss() 并进一步调用 finish() 来立即隐藏它。

但是,在处理程序中执行繁重的任务是实现您想要的目标的不正确方法。反正它不会像你想的那样工作。将会发生的是您的代码将阻塞处理程序内的 UI 线程,并且不会显示任何进度(如果您保持足够长的时间,应用程序可能会被终止)。

正确的做法是实现一个 AsyncTask,本文档中有一个简单的代码示例 link。您需要在 doInBackground() 中显示 () 进度对话框、执行异步任务、执行文件等代码,并在途中通过 publishProgress 更新进度值。 在 onProgressUpdate() 中,更新对话框或必填字段,最后,在 onPostExecute 中执行 finish() 或您希望在完成时执行的其他操作。