程序栏在android中未使用AsyncTask显示
我刚刚写了一段代码,当我和服务器交互时需要显示进度条。但若我在下面的代码中调用disclease方法,它就不起作用了程序栏在android中未使用AsyncTask显示,android,android-asynctask,android-progressbar,Android,Android Asynctask,Android Progressbar,我刚刚写了一段代码,当我和服务器交互时需要显示进度条。但若我在下面的代码中调用disclease方法,它就不起作用了 public class AsyncClass extends AsyncTask<String, String, String> { String result; public ProgressDialog progressbar; static Context context; public AsyncClass(Contex
public class AsyncClass extends AsyncTask<String, String, String> {
String result;
public ProgressDialog progressbar;
static Context context;
public AsyncClass(Context context,String result) {
this.context = context;
this.result = result;
}
@Override
protected String doInBackground(String... params) {
try {
HttpClient httpclient = new DefaultHttpClient();
URI u = new URI(params[0]);
// url = Urls.SENDMOVIE_REQUEST_URL;
HttpGet HG = new HttpGet(u);
HttpResponse response = httpclient.execute(HG);
//httpEntity = httpResponse.getEntity();
result = EntityUtils.toString(response.getEntity());
Log.d("result", result);
} catch(Exception e) {
e.printStackTrace();
}
return result;
}
@Override
protected void onPreExecute() {
progressbar = new ProgressDialog(context);
progressbar.setCancelable(true);
progressbar.setMessage("loading....");
progressbar.setProgressStyle(ProgressDialog.STYLE_SPINNER);
progressbar.setProgress(0);
progressbar.show();
}
@Override
protected void onPostExecute(String result) {
progressbar.dismiss();
}
}
公共类AsyncClass扩展了AsyncTask{
字符串结果;
公共进度条;
静态语境;
公共异步类(上下文、字符串结果){
this.context=上下文;
this.result=结果;
}
@凌驾
受保护的字符串doInBackground(字符串…参数){
试一试{
HttpClient HttpClient=新的DefaultHttpClient();
URI u=新的URI(参数[0]);
//url=url.SENDMOVIE\u REQUEST\u url;
HttpGet HG=新的HttpGet(u);
HttpResponse response=httpclient.execute(HG);
//httpEntity=httpResponse.getEntity();
结果=EntityUtils.toString(response.getEntity());
Log.d(“结果”,结果);
}捕获(例外e){
e、 printStackTrace();
}
返回结果;
}
@凌驾
受保护的void onPreExecute(){
progressbar=新建ProgressDialog(上下文);
progressbar.setCancelable(真);
progressbar.setMessage(“加载…”);
progressbar.setProgressStyle(ProgressDialog.STYLE_微调器);
progressbar.setProgress(0);
progressbar.show();
}
@凌驾
受保护的void onPostExecute(字符串结果){
progressbar.disclose();
}
}
我认为它没有显示是因为progressbar.setProgress(0)代码>
把它取下来试试
如果您想要更新,您需要这样做:
private class DownloadTask extends AsyncTask<String, String, String> {
@Override
protected void onPreExecute() {
super.onPreExecute();
}
@Override
protected String doInBackground(String... urls) {
//Copy you logic to calculate progress and call
publishProgress("" + progress);
}
protected void onProgressUpdate(String... progress) {
mProgressDialog.setProgress(Integer.parseInt(progress[0]));
}
@Override
protected void onPostExecute(String result) {
dismissDialog(DIALOG_DOWNLOAD_PROGRESS);
}
}
私有类下载任务扩展了异步任务{
@凌驾
受保护的void onPreExecute(){
super.onPreExecute();
}
@凌驾
受保护的字符串doInBackground(字符串…URL){
//复制您的逻辑以计算进度并调用
出版进度(“+”进度);
}
受保护的void onProgressUpdate(字符串…进度){
mProgressDialog.setProgress(Integer.parseInt(progress[0]));
}
@凌驾
受保护的void onPostExecute(字符串结果){
dismissDialog(对话框下载进度);
}
}
编辑了伊克巴尔的答案
private class ProgressTask extends AsyncTask<String, Void, Boolean> {
private ProgressDialog dialog;
public ProgressTask(){
dialog = new ProgressDialog(HomeActivity.this);
dialog.setCancelable(false);
}
/** progress dialog to show user that the backup is processing. */
/** application context. */
@Override
protected void onPreExecute() {
this.dialog.setMessage("Please wait");
this.dialog.show();
}
protected Boolean doInBackground(final String... args) {
/** * Write your code */
}
@Override
protected void onPostExecute(final Boolean success) {
if (dialog.isShowing()) {
dialog.dismiss();
}
if (success) {
// display UI
}
}
}
私有类ProgressTask扩展了AsyncTask{
私人对话;
公共进程任务(){
dialog=新建ProgressDialog(HomeActivity.this);
对话框。可设置可取消(false);
}
/**“进度”对话框,向用户显示备份正在处理。*/
/**应用程序上下文。*/
@凌驾
受保护的void onPreExecute(){
this.dialog.setMessage(“请稍候”);
this.dialog.show();
}
受保护的布尔doInBackground(最终字符串…args){
/***编写代码*/
}
@凌驾
受保护的void onPostExecute(最终布尔值成功){
如果(dialog.isShowing()){
dialog.dismise();
}
如果(成功){
//显示用户界面
}
}
}
使用下面的代码,它将为您完成工作
private class ProgressTask extends AsyncTask<String, Void, Boolean> {
private ProgressDialog dialog = new ProgressDialog(HomeActivity.this);
/** progress dialog to show user that the backup is processing. */
/** application context. */
@Override
protected void onPreExecute() {
this.dialog.setMessage("Please wait");
this.dialog.show();
}
protected Boolean doInBackground(final String... args) {
/** * Write your code */
}
@Override
protected void onPostExecute(final Boolean success) {
if (dialog.isShowing()) {
dialog.dismiss();
}
if (success) {
// display UI
}
}
}
并将其从Interecine()中移除。检查progressbar的声明。您不需要全局初始化对象吗?您是否尝试在onProgressUpdate()中进行初始化?@Iqbal它在他的AsyncTask中是全局的。如何启动AsyncTask?尝试删除此行:progressbar.setProgress(0);然后在asyncTask的构造函数中声明progress对话框,并将上下文从活动传递给asyncTask。那么问题可能在于调用asyncTask。你是怎么做到的?你调试了吗?执行流程是如何进行的。它合适吗?不。如果我在post中不使用DISCLISE,则执行它时会正常工作,但在一段时间后不会使用DISCLISE OK。。检查我的答案中的编辑,希望这将帮助你。
public AsyncClass(Context context,String result) {
this.context = context;
this.result = result;
progressbar = new ProgressDialog(context);
}