我在android studio上的progressDialog遇到问题。创建活动后,必须加载一个折线图,并且需要一个进度对话框来等待直到该折线图加载完成。它工作正常,但我需要将数据流保存在文件中,这需要花费一些时间,因此我需要再次显示一个progressdialog,但它不会出现。
这是我需要再次显示的方法。
private void writeDataToString(String data, String file_name) throws FileNotFoundException {
try {
ProgressDialog progressDialog2 = new ProgressDialog(this);
progressDialog2.setIcon(R.mipmap.ic_launcher);
progressDialog2.setMessage("Loading...");
progressDialog2.show();
FileOutputStream fos = this.openFileOutput(file_name, MODE_PRIVATE);
OutputStreamWriter osw = new OutputStreamWriter(fos);
osw.write(data);
osw.flush();
osw.close();
progressDialog2.dismiss();
}
catch (IOException ex) {
ex.printStackTrace();
}
}
我做错了什么?这是onCreate方法。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_records);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
drawer.addDrawerListener(toggle);
toggle.syncState();
NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
navigationView.setNavigationItemSelectedListener(this);
progressDialog = new ProgressDialog(this);
progressDialog.setIcon(R.mipmap.ic_launcher);
progressDialog.setMessage("Loading...");
progressDialog.show();
// there are a lot of things here but I dont show it
//......
}
然后是取消第一个progressDialog(起作用的对话框)的方法。确实,它确实很在乎,但我顺便添加了它。
@Override
public void onSensorChanged(SensorEvent event) {
double valor;
if (recording && takeValue) {
float[] values = event.values;
valor = Math.sqrt(Math.pow(values[0], 2) + Math.pow(values[1], 2) + Math.pow(values[2], 2));
datos.add((float) valor);
}
if (takeValue && !(open||savedOpened)) {
if (flag==149)
seg=0;
if (flag < 150)
flag++;
else{
// Here I cancel it
progressDialog.cancel();
}
//.................
}
答案 0 :(得分:0)
我相信,如果OutputStreamWriter在另一个线程上运行其write方法是可能的(因为这不是UI要求),所以当它进行调用时,它将继续执行代码,导致进度条关闭,您应该看到如果在完成write方法后触发了某个侦听器或事件,并在其中调用进度对话框的关闭项