我已设置以太网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();
}
}
});
答案 0 :(得分:2)
您正在使用progressdialog.dismiss();
以便取消progressdialog。
您应该为其使用asunc任务
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();
}
}
});
答案 1 :(得分:0)
显示进度对话框的代码工作正常,可能是进程很快,这就是为什么进度对话框不可见。 可以尝试使用线程睡眠来实际查看它是否存在问题。
答案 2 :(得分:0)
它确实显示了进度,但你通过调用dismiss()并进一步调用finish()来立即隐藏它。
但是,在处理程序中执行繁重的任务是实现所需目标的不正确方法。无论如何,这都行不通。将会发生的是,您的代码将阻止处理程序内的UI线程,并且不会显示任何进度(如果您保持足够长的时间,应用程序可能会被杀死)。
执行此操作的正确方法是实现AsyncTask,此文档链接中有一个简单的代码示例。您需要显示()进度对话框,执行异步任务,在doInBackground()中执行文件等代码,并在途中通过publishProgress更新进度值。 在onProgressUpdate()中,更新对话框或必填字段,最后在onPostExecute中执行finish()或完成后的其他操作。