当前位置: 首页 > 面试题库 >

具有ProgressDialog的外部AsyncTask类[更新:并返回?

梁季
2023-03-14
问题内容

已更新:(请参见下文)我已经环顾了几天,却找不到直接的答案。有人说有可能说一些话来完成某些说不是。我对此感到疯狂。

我想要的只是让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();
    }
}

AsyncClass.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();
        }
    }


 类似资料:
  • 你能帮帮我吗,我的代码在我尝试实现async任务以在我的应用程序中显示进度对话框之前运行,已经一周了,我尝试了几种解决方案但仍然是同样的问题,请有人纠正我的代码,我的代码是: 我的logcat显示错误: 05-31 12:13:09.437:I/编舞(698):跳过64帧!应用程序可能在其主线程上做了太多工作。05-31 12:13:10.159:我/编舞(698):跳过了60帧!应用程序可能在其

  • 我在通知CursorAdapter数据已更改时遇到问题。 SQLite数据库用AsyncTask更新(有公共接口,ListFragment用listener实现),我尝试用onPostExecute刷新ListAdapter,但我真的不知道如何刷新。

  • 问题内容: 如何从AsyncTask中获取数据?我的MainActivity正在调用触发AsyncTask的DataCall.getJSON函数,但是我不确定如何将数据返回到原始Activity。 调用DataCall的MainActivity应该返回一个字符串并将其保存在 数据通话: 问题答案: 对我来说,关键是创建一个名为URLWithParams的类或其他类,因为AsyncTask将只允许发

  • 我想在android中从mysql数据库中检索数据,并在textview中显示 这是后台asynctask代码 }

  • 我有一个类SomeActivity扩展了BaseListActivity。BaseListActivity扩展了ListActivity和所有工作的功能。 但当列表必须更新时,我使用AsyncTask使用远程服务器调用,该调用声明如下: 在那里,有一行可以像这样更新列表: 但这条线似乎起不到什么作用。 有什么不同之处可以让它发挥作用吗? 但例外情况并不准确。我能解决主机问题。在我添加BaseLis

  • 客户表中的余额分为:储值余额和盈利余额 要求下单时订单金额优先从储值余额中扣除,其次盈利余额扣除 扣除储值余额,如返回的balance小于0为待扣除金额,说明还需要扣除盈利余额: <update id="deductBalance" parameterType="com.pay.business.domain.CustomDO" > <!-- BEFORE:更新语句执行前执行selectKe