Java 在任务运行时显示ProgressBar
我试图只在任务运行时显示进度条,这是我的代码Java 在任务运行时显示ProgressBar,java,android,android-asynctask,Java,Android,Android Asynctask,我试图只在任务运行时显示进度条,这是我的代码 public void onButtonPressed() { //loadingSpinner is a ProgressBar already instantiated whit visibility GONE; loadingSpinner.setVisibility(View.VISIBLE); boolean resultFromAsyncTask = AnotherClass.AsyncTa
public void onButtonPressed() {
//loadingSpinner is a ProgressBar already instantiated whit visibility GONE;
loadingSpinner.setVisibility(View.VISIBLE);
boolean resultFromAsyncTask = AnotherClass.AsyncTaskMethod();
if(resultFromAsyncTask ) {
loadingSpinner.setVisibility(View.GONE);
//do something
finish();
}else{
loadingSpinner.setVisibility(View.GONE);
//Show alert
}
}
问题是,当我第一次更改可见性时,什么都没有发生。我缺少什么?您调用异步任务,但却像使用常规函数一样使用它。您不能基于这样的异步任务的结果,代码将直接在其上运行并执行下一行。
您想要的是显示进度条,然后在不返回的情况下开始任务。您需要类似于onPostExecute中的广播这样的东西来回调调用类,让它知道调用何时完成。
编辑**在这种情况下,由于bool默认为false,它将在if语句中使用该值,并在显示时将其隐藏。您调用异步任务,但将其作为常规函数使用。您不能基于这样的异步任务的结果,代码将直接在其上运行并执行下一行。
您想要的是显示进度条,然后在不返回的情况下开始任务。您需要类似于onPostExecute中的广播这样的东西来回调调用类,让它知道调用何时完成。
编辑**在这种情况下,由于bool默认为false,它将在if语句中使用该值,并在显示时将其隐藏。不要使事情过于复杂,
AsyncTask
具有完成此任务所需的所有方法
设置loadingSpinner.setVisibility(View.VISIBLE)代码>在AsyncTask的onPreExecute
内部,并设置loadingSpinner.setVisibility(View.GONE)代码>内部onPostExecute
像这样:
private class YourTask extends AsyncTask<String, Void, String> {
@Override protected void onPreExecute(){
loadingSpinner.setVisibility(View.VISIBLE);
}
@Override
protected String doInBackground(String... params) {
//Do background work
}
@Override protected void onPostExecute(String result) {
loadingSpinner.setVisibility(View.GONE);
}
}
私有类YourTask扩展AsyncTask{
@重写受保护的void onPreExecute(){
loadingSpinner.setVisibility(View.VISIBLE);
}
@凌驾
受保护的字符串doInBackground(字符串…参数){
//做背景工作
}
@重写受保护的void onPostExecute(字符串结果){
loadingSpinner.setVisibility(View.GONE);
}
}
不要让事情过于复杂,AsyncTask
拥有完成此任务所需的所有方法
设置loadingSpinner.setVisibility(View.VISIBLE)代码>在AsyncTask的onPreExecute
内部,并设置loadingSpinner.setVisibility(View.GONE)代码>内部onPostExecute
像这样:
private class YourTask extends AsyncTask<String, Void, String> {
@Override protected void onPreExecute(){
loadingSpinner.setVisibility(View.VISIBLE);
}
@Override
protected String doInBackground(String... params) {
//Do background work
}
@Override protected void onPostExecute(String result) {
loadingSpinner.setVisibility(View.GONE);
}
}
私有类YourTask扩展AsyncTask{
@重写受保护的void onPreExecute(){
loadingSpinner.setVisibility(View.VISIBLE);
}
@凌驾
受保护的字符串doInBackground(字符串…参数){
//做背景工作
}
@重写受保护的void onPostExecute(字符串结果){
loadingSpinner.setVisibility(View.GONE);
}
}
在@Notsileous的基础上,从AsyncTask的onPostExecute
方法调用一个方法来完成一些UI工作。您可能需要将该代码包装在runOnUiThread
中,以使其正常工作
要举例说明您的代码:
public void onButtonPressed() {
//loadingSpinner is a ProgressBar already instantiated whit visibility GONE;
loadingSpinner.setVisibility(View.VISIBLE);
AnotherClass.AsyncTaskMethod().execute();
}
[...]
public void doneLoading(boolean resultFromAsyncTask ) {
runOnUiThread {
if(resultFromAsyncTask ) {
loadingSpinner.setVisibility(View.GONE);
//do something
finish();
}else{
loadingSpinner.setVisibility(View.GONE);
//Show alert
}
}
}
[...]
AsyncTask postExecuteMethod(boolean executionResult) {
doneLoading(executionResult);
}
[...]
希望这有助于澄清!:) 在@Notsileous的基础上,从AsyncTask的onPostExecute
方法调用一个方法来完成一些UI工作。您可能需要将该代码包装在runOnUiThread
中,以使其正常工作
要举例说明您的代码:
public void onButtonPressed() {
//loadingSpinner is a ProgressBar already instantiated whit visibility GONE;
loadingSpinner.setVisibility(View.VISIBLE);
AnotherClass.AsyncTaskMethod().execute();
}
[...]
public void doneLoading(boolean resultFromAsyncTask ) {
runOnUiThread {
if(resultFromAsyncTask ) {
loadingSpinner.setVisibility(View.GONE);
//do something
finish();
}else{
loadingSpinner.setVisibility(View.GONE);
//Show alert
}
}
}
[...]
AsyncTask postExecuteMethod(boolean executionResult) {
doneLoading(executionResult);
}
[...]
希望这有助于澄清!:) 这似乎是最简单的方法,我尝试过,但没有成功。微调器仅在onPostExecute阶段可见(我在setVisibility(View.GONE)之前添加了一个Thread.sleep来查看它)@NicolasP请更新您的问题并提供您的代码,说明您是如何实现它的。这似乎是最简单的方法,我尝试过,但不起作用。微调器仅在onPostExecute阶段可见(我在setVisibility(View.go)之前添加了一个Thread.sleep来查看它)@NicolasP请更新您的问题并提供您的代码,说明您是如何实现它的。