ProgressDialog不';不要出现在Android中
当我在“活动”中获取一些数据时,我试图让ProgressDialog出现。 “活动”正常运行,并获得数据,但未显示ProgressDialogProgressDialog不';不要出现在Android中,android,android-dialog,Android,Android Dialog,当我在“活动”中获取一些数据时,我试图让ProgressDialog出现。 “活动”正常运行,并获得数据,但未显示ProgressDialog private void updateData() { ProgressDialog dialog = ProgressDialog.show(ParkActivity.this, "fvhnn", "A actualizar. Aguarde por favor...", true); ... ...
private void updateData() {
ProgressDialog dialog = ProgressDialog.show(ParkActivity.this, "fvhnn", "A actualizar. Aguarde por favor...", true);
...
...
dialog.dismiss();
...
}
遵循我的活动代码
public class ParkActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Set View to register.xml
setContentView(R.layout.park);
SharedPreferences settings = getSharedPreferences(PREF_FILE, 0);
int ocupados = settings.getInt("ocupados", -1);
if(ocupados == -1) {
((TextView) findViewById(R.id.txtPercentageOcupation)).setVisibility(View.INVISIBLE);
((TextView) findViewById(R.id.txtLastUpdate)).setVisibility(View.INVISIBLE);
((TextView) findViewById(R.id.txtPlacesAvailable)).setVisibility(View.INVISIBLE);
((Button) findViewById(R.id.btnParkUpdate)).setVisibility(View.INVISIBLE);
updateData();
} else {
int total = settings.getInt("total", 440);
long data = settings.getLong("data", 0);
putData(ocupados, total, data);
}
Button btnUpdate = (Button) findViewById(R.id.btnParkUpdate);
btnUpdate.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
updateData();
}
});
}
private void updateData() {
ProgressDialog dialog = ProgressDialog.show(ParkActivity.this, "fvhnn", "A actualizar. Aguarde por favor...", true);
SharedPreferences settings = getSharedPreferences(PREF_FILE, 0);
String session = settings.getString("sessionID", "null");
int[] vagas = ISEP_Proxy.vagas(session);
Date dt = new Date();
putData(vagas[0], vagas[1], dt.getTime());
dialog.dismiss();
// save data
SharedPreferences.Editor editor = settings.edit();
editor.putInt("ocupados", vagas[0]);
editor.putInt("total", vagas[1]);
editor.putLong("data", dt.getTime());
editor.commit();
}
private void putData(int ocupados, int total, long date) {
String placesFormat = getResources().getString(R.string.PLACES_AVAILABLE);
String percentageFormat = getResources().getString(R.string.PERCENTAGE_OCUPATION);
String lastUpdate = getResources().getString(R.string.LAST_UPDATE);
double percentage = 100.0 * ocupados / total;
SimpleDateFormat df = new SimpleDateFormat("HH'h'mm 'de' dd-MM-yyyy");
((TextView) findViewById(R.id.txtPercentageOcupation)).setVisibility(View.VISIBLE);
((TextView) findViewById(R.id.txtLastUpdate)).setVisibility(View.VISIBLE);
((TextView) findViewById(R.id.txtPlacesAvailable)).setVisibility(View.VISIBLE);
((Button) findViewById(R.id.btnParkUpdate)).setVisibility(View.VISIBLE);
((TextView) findViewById(R.id.txtPercentageOcupation)).setText(String.format(percentageFormat, ((int) percentage) + "%"));
((TextView) findViewById(R.id.txtPlacesAvailable)).setText(String.format(placesFormat, total - ocupados));
((TextView) findViewById(R.id.txtLastUpdate)).setText(String.format(lastUpdate, df.format(date)));
}
}
有人知道问题出在哪里吗
编辑 @Ted Hopp建议使用异步任务。 我创建了GetISEPData类并将其放在对话框中,但现在应用程序给我一个错误并关闭
private class GetISEPData extends AsyncTask<Void, Void, Void> {
Context cx;
ProgressDialog dialog;
public GetISEPData (Context context) {
cx = context;
}
@Override
protected Void doInBackground(Void... params) {
SharedPreferences settings = getSharedPreferences(PREF_FILE, 0);
String session = settings.getString("sessionID", "null");
int[] vagas = ISEP_Proxy.vagas(session);
Date dt = new Date();
putData(vagas[0], vagas[1], dt.getTime());
// save data
SharedPreferences.Editor editor = settings.edit();
editor.putInt("ocupados", vagas[0]);
editor.putInt("total", vagas[1]);
editor.putLong("data", dt.getTime());
editor.commit();
return null;
}
@Override
protected void onPostExecute(Void result) {
super.onPostExecute(result);
dialog = ProgressDialog.show(ParkActivity.this, "", "A actualizar. Aguarde por favor...", true);
}
@Override
protected void onPreExecute() {
// TODO Auto-generated method stub
super.onPreExecute();
dialog.dismiss();
}
}
在调用
show()
和调用dismise()
之间,您需要在单独的线程中完成这项工作。在将控制权返回到框架之前,对话框没有机会绘制。请看一个简单的方法来做到这一点
编辑:在代码的更新版本中,onPreExecute和onPostExecute的逻辑颠倒了——您试图在对话框显示之前关闭它 在调用
show()
和调用dismise()
之间,您需要在单独的线程中完成这项工作。在将控制权返回到框架之前,对话框没有机会绘制。请看一个简单的方法来做到这一点
编辑:在代码的更新版本中,onPreExecute和onPostExecute的逻辑颠倒了——您试图在对话框显示之前关闭它 我认为它已显示,但它也会立即解除,因为show()和disclose()方法放在同一个线程中。我认为它已显示,但它也会立即解除,因为show()和disclose()方法位于同一个线程中方法放在同一个线程中。可能重复的thx可能重复的响应我创建了类GetISEPData并放置在对话框中,但现在应用程序给我一个错误并关闭<代码>私有类GetISEPData扩展AsyncTask{Context cx;ProgressDialog对话框;公共GetISEPData(Context Context){cx=Context;}@Override受保护的Void doInBackground(Void…params){int[]vagas=ISEP_Proxy.vagas(会话);Date dt=new Date();putData(vagas[0],vagaas[1],dt.getTime());}
@Override protected void onPostExecute(void result){super.onPostExecute(result);dialog=ProgressDialog.show(ParkActivity.this,“,”A realizar.Aguarde por four…”,true);}@Override protected void onPreExecute(){super.onPreExecute();dialog.dismise();}
在invoke中放入:按钮btnUpdate=(按钮)findViewById(R.id.btnParkUpdate);btnUpdate.setOnClickListener(新视图.OnClickListener(){@Override public void onClick(视图arg0){new GetISEPData(ParkActivity.this.execute();}})
@MiguelBorges无法读取粘贴到注释中的代码。你能编辑你原来的帖子并在那里添加代码吗?另外,请发布有关error.lol的详细信息(堆栈跟踪)。谢谢。那时我意识到,无论何时你想要实现一个ProcessDialog异步任务,你都必须实现一个,对吗?@MiguelBorges是的。任何耗时的操作都需要工作线程。虽然有很多方法可以做到这一点,但使用AsyncTask是最简单的响应方法之一。thx我创建了类GetISEPData并放置在对话框中,但现在应用程序给我一个错误并关闭<代码>私有类GetISEPData扩展AsyncTask{Context cx;ProgressDialog对话框;公共GetISEPData(Context Context){cx=Context;}@Override受保护的Void doInBackground(Void…params){int[]vagas=ISEP_Proxy.vagas(会话);Date dt=new Date();putData(vagas[0],vagaas[1],dt.getTime());}@Override protected void onPostExecute(void result){super.onPostExecute(result);dialog=ProgressDialog.show(ParkActivity.this,“,”A realizar.Aguarde por four…”,true);}@Override protected void onPreExecute(){super.onPreExecute();dialog.dismise();}
在invoke中放入:按钮btnUpdate=(按钮)findViewById(R.id.btnParkUpdate);btnUpdate.setOnClickListener(新视图.OnClickListener(){@Override public void onClick(视图arg0){new GetISEPData(ParkActivity.this.execute();}})
@MiguelBorges无法读取粘贴到注释中的代码。你能编辑你原来的帖子并在那里添加代码吗?另外,请发布有关error.lol的详细信息(堆栈跟踪)。谢谢。那时我意识到,无论何时你想要实现一个ProcessDialog异步任务,你都必须实现一个,对吗?@MiguelBorges是的。任何耗时的操作都需要工作线程。虽然有很多方法可以做到这一点,但使用AsyncTask是最简单的方法之一。获取数据是由Webservice/SOAP完成的,因此需要时间。获取数据是由Webservice/SOAP完成的,因此需要时间。
Button btnUpdate = (Button) findViewById(R.id.btnParkUpdate);
btnUpdate.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
new GetISEPData(ParkActivity.this).execute();
}
});