java - 带有 ProgressDialog 的外部 AsyncTask 类 [更新 : and returning back?]

标签 java android android-asynctask progressdialog

**更新:(见下文)**我已经四处寻找了几天,但找不到直接的答案。 有人说有可能,有人说可以,有人说不可能。我对此感到疯狂。

我想要的只是让 AsyncTaskTask 显示一个外部类的进度条。为此,我将传递上下文,正如您在主类中看到的那样。但无论我尝试什么,我都会得到 NullPointerException

工作代码示例表示赞赏。谢谢

顺便说一句,使用 Android 2.2。

主要内容:

import android.app.Activity;
import android.os.Bundle;

public class AsyncDemo extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        new AsyncClass(this).execute();
    }
}

异步类.java

import android.app.ProgressDialog;
import android.content.Context;
import android.os.AsyncTask;
import android.os.SystemClock;

public class AsyncClass extends AsyncTask<Void, String, Void> {
    private Context context;
    ProgressDialog dialog = new ProgressDialog(context);

    public AsyncClass(Context cxt) {
        context = cxt;
    }

    @Override
    protected void onPreExecute() {
        dialog.setTitle("Please wait");
        dialog.show();
    }

    @Override
    protected Void doInBackground(Void... unused) {
        SystemClock.sleep(2000);
        return (null);
    }

    @Override
    protected void onPostExecute(Void unused) {
        dialog.dismiss();
    }
}

更新: 我有一个后续问题:使用上面的代码,是否可以通过某种方式将 onPostExecute 方法的值返回到主类? (抱歉我是菜鸟) 我试过这样的事情:

String result = new AsyncClass(this).execute();

然后是一个返回字符串的方法。但我不能那样做,因为我得到了:

Type mismatch: cannot convert from AsyncTask<String,Void,Void> to String

我该怎么做才能解决这个问题?谢谢。

最佳答案

您正在使用空上下文创建 ProgressDialog。以下代码对我有用。

public class AsyncClass extends AsyncTask<Void, String, Void> {
    private Context context;
    ProgressDialog dialog;

        public AsyncClass(Context cxt) {
            context = cxt;
            dialog = new ProgressDialog(context);
        }

        @Override
        protected void onPreExecute() {
            dialog.setTitle("Please wait");
            dialog.show();
        }

        @Override
        protected Void doInBackground(Void... unused) {
            SystemClock.sleep(2000);
            return (null);
        }

        @Override
        protected void onPostExecute(Void unused) {
            dialog.dismiss();
        }
    }

关于java - 带有 ProgressDialog 的外部 AsyncTask 类 [更新 : and returning back?],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3347247/

相关文章:

android - 什么会导致 AsyncTask 不执行?

xslt中的java函数getTime

java - 数组中的对象,可以做到吗?

android - imageview.setImageMatrix 不改变图像

java - FragmentTabHost - 没有已知标签为空的标签

java - 未经检查的调用 'execute(Params...)' 作为原始类型 'android.os.AsyncTask' 的成员

Android关于下载数据和 fragment 列表

用于简单分布式计算问题的Java框架/工具

java - RMI:注册表安全问题

Android Recyclerview 反馈问题