Android 在 onClick 方法结束之前不会显示进度对话框
Android Progress dialog don't show until the end of onClick method
我正在尝试在单击登录按钮时显示进度对话框。但是只有当我到达 onClick 方法的末尾时,才会显示进度对话框。而不是一个开始。
在 signIn 方法中,我执行一个异步任务来访问服务器。
所以一直由异步任务占用,没有显示进度对话框。只有当到达 onClick 方法的末尾时,才会显示进度对话框....
有人知道我做错了什么吗?
public void onClick(View view) {
progressDialog = new ProgressDialog(SignIn.this);
progressDialog.setMessage("Sign in in progress");
progressDialog.setTitle("Please wait");
progressDialog.setCancelable(false);
progressDialog.setIndeterminate(true);
progressDialog.show();
repSignIn = signIn(SignIn.this, etEmail.getText().toString(), etPassword.getText().toString());
if(!repSignIn.hasError())
{
Toast.makeText(getApplicationContext(), "Sign In successfully", Toast.LENGTH_SHORT).show();
onBackPressed();
}
else
{
Toast.makeText(getApplicationContext(), repSignIn.getErrorMessage(), Toast.LENGTH_SHORT).show();
}
//progressDialog.cancel();
}
非常感谢
纳丁
您需要将它放在 AsyncTask
的 onPreExecute
中,而不是在 onClick 中使用 progressDialog
,然后在 onPostExecute
中关闭它。
原因是 AsyncTask
使用了一个异步的工作线程,这就是 progressDialog
比预期提前完成的原因。
class MyAsyncTask extends AsyncTask<Void, Void, Void>{
@Override
protected void onPreExecute() {
progressDialog.show();
}
@Override
protected Void doInBackground(Void... params) {
// do your stuff
return null;
}
@Override
protected void onPostExecute(Void aVoid) {
progressDialog.dismiss();
}
}
在异步任务中重写 onPreExecute() 方法,你必须在那里显示进度条..
private void signIn(your parameters here) {
new AsyncTask<Void, Void, Void>(){
@Override
protected void onPreExecute() {
super.onPreExecute();
progressDialog = new ProgressDialog(SignIn.this);
progressDialog.setMessage("Sign in in progress");
progressDialog.setTitle("Please wait");
progressDialog.setCancelable(false);
progressDialog.setIndeterminate(true);
progressDialog.show();
}
@Override
protected void doInBackground(Void... params) {
//your logic here
}
@Override
protected void onPostExecute(JSONObject response) {
super.onPostExecute(response);
progressDialog.dismiss();
}
}.execute();
}
希望这有帮助
在 Asynctask 中使用进度日志。在 onPreExecute 中初始化并启动对话,在 onPostExecute 中关闭对话。
为我工作,
@Override
protected void onPreExecute() {
progress = new ProgressDialog(UpdateActivity.this);
progress.setCancelable(false);
progress.setMessage("Please wait data is Processing");
progress.show();
}
@Override
protected void onPostExecute(Void aVoid) {
super.onPostExecute(aVoid);
progress.dismiss();
}
我已经更改了我的代码
String result = new sendDataToServer().execute(url, "PUT", jsonData.toString()).get();
通过这样做:
https://gist.github.com/cesarferreira/ef70baa8d64f9753b4da
现在效果很好。
感谢您的帮助。 =)
我正在尝试在单击登录按钮时显示进度对话框。但是只有当我到达 onClick 方法的末尾时,才会显示进度对话框。而不是一个开始。 在 signIn 方法中,我执行一个异步任务来访问服务器。 所以一直由异步任务占用,没有显示进度对话框。只有当到达 onClick 方法的末尾时,才会显示进度对话框.... 有人知道我做错了什么吗?
public void onClick(View view) {
progressDialog = new ProgressDialog(SignIn.this);
progressDialog.setMessage("Sign in in progress");
progressDialog.setTitle("Please wait");
progressDialog.setCancelable(false);
progressDialog.setIndeterminate(true);
progressDialog.show();
repSignIn = signIn(SignIn.this, etEmail.getText().toString(), etPassword.getText().toString());
if(!repSignIn.hasError())
{
Toast.makeText(getApplicationContext(), "Sign In successfully", Toast.LENGTH_SHORT).show();
onBackPressed();
}
else
{
Toast.makeText(getApplicationContext(), repSignIn.getErrorMessage(), Toast.LENGTH_SHORT).show();
}
//progressDialog.cancel();
}
非常感谢
纳丁
您需要将它放在 AsyncTask
的 onPreExecute
中,而不是在 onClick 中使用 progressDialog
,然后在 onPostExecute
中关闭它。
原因是 AsyncTask
使用了一个异步的工作线程,这就是 progressDialog
比预期提前完成的原因。
class MyAsyncTask extends AsyncTask<Void, Void, Void>{
@Override
protected void onPreExecute() {
progressDialog.show();
}
@Override
protected Void doInBackground(Void... params) {
// do your stuff
return null;
}
@Override
protected void onPostExecute(Void aVoid) {
progressDialog.dismiss();
}
}
在异步任务中重写 onPreExecute() 方法,你必须在那里显示进度条..
private void signIn(your parameters here) {
new AsyncTask<Void, Void, Void>(){
@Override
protected void onPreExecute() {
super.onPreExecute();
progressDialog = new ProgressDialog(SignIn.this);
progressDialog.setMessage("Sign in in progress");
progressDialog.setTitle("Please wait");
progressDialog.setCancelable(false);
progressDialog.setIndeterminate(true);
progressDialog.show();
}
@Override
protected void doInBackground(Void... params) {
//your logic here
}
@Override
protected void onPostExecute(JSONObject response) {
super.onPostExecute(response);
progressDialog.dismiss();
}
}.execute();
}
希望这有帮助
在 Asynctask 中使用进度日志。在 onPreExecute 中初始化并启动对话,在 onPostExecute 中关闭对话。 为我工作,
@Override
protected void onPreExecute() {
progress = new ProgressDialog(UpdateActivity.this);
progress.setCancelable(false);
progress.setMessage("Please wait data is Processing");
progress.show();
}
@Override
protected void onPostExecute(Void aVoid) {
super.onPostExecute(aVoid);
progress.dismiss();
}
我已经更改了我的代码
String result = new sendDataToServer().execute(url, "PUT", jsonData.toString()).get();
通过这样做:
https://gist.github.com/cesarferreira/ef70baa8d64f9753b4da
现在效果很好。
感谢您的帮助。 =)