当前位置: 首页 > 知识库问答 >
问题:

如何在Android中正确使用AsyncTask[关闭]

须原
2023-03-14

想改进这个问题吗 通过编辑此帖子,更新问题,使其只关注一个问题。

我不想将任何参数传递给AsyncTask的doInBackground方法。

那么代码应该是什么样的呢?

共有3个答案

司徒经纶
2023-03-14

创建您的AsyncTask类,就好像您不想将任何参数传递给doInbackground一样:

 public class LongOperation extends AsyncTask<Void, Void, String> {


          public LongOperation(Context context) {

          }

          @Override
          protected void onPreExecute() {

          }

          @Override
          protected String doInBackground(Void... params) {

              return null;
          }      

          @Override
          protected void onPostExecute(String result) {                           

          }
    }

并在不传递任何参数的情况下启动AsyncTask以执行:

   LongOperation longOperation = new LongOperation(this);
   longOperation.execute();
柴宝
2023-03-14

根据AsyncTask,其

 AsyncTask<Params, Progress, Result>
  • 参数,执行时发送到任务的参数类型。
  • 进度,在后台计算期间发布的进度单元的类型。
  • 结果,后台计算结果的类型。

因此,如果您想在doInbackground中传递空,只需将空替换为参数。

示例代码:

class DownloadLink extends AsyncTask<Void, Void, Void> {


        @Override
        protected Void doInBackground(Void... params) {
            // TODO Auto-generated method stub

            //Do Your stuff here..
            return null;
        }
    }

并称之为:

 new DownloadLink().execute();
李法
2023-03-14
import android.app.Activity;
import android.app.ProgressDialog;
import android.os.AsyncTask;
import android.os.Bundle;

public class AsyncExample extends Activity{


private String url="http://www.google.co.in";

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
}


@Override
protected void onResume() {
    // TODO Auto-generated method stub
    super.onResume();

    new AsyncCaller().execute();

}

private class AsyncCaller extends AsyncTask<Void, Void, Void>
{
    ProgressDialog pdLoading = new ProgressDialog(AsyncExample.this);

    @Override
    protected void onPreExecute() {
        super.onPreExecute();

        //this method will be running on UI thread
        pdLoading.setMessage("\tLoading...");
        pdLoading.show();
    }
    @Override
    protected Void doInBackground(Void... params) {

        //this method will be running on background thread so don't update UI frome here
        //do your long running http tasks here,you dont want to pass argument and u can access the parent class' variable url over here


        return null;
    }

    @Override
    protected void onPostExecute(Void result) {
        super.onPostExecute(result);

        //this method will be running on UI thread

        pdLoading.dismiss();
    }

    }
}
 类似资料:
  • 我正在学习Spring Core认证,在提供的学习材料中,我对这个问题有一些疑问: 关闭应用程序上下文的首选方法是什么? 我知道如果我有这样的东西: 通过在上下文对象上使用close()方法,ApplicationContext被关闭,应用程序被销毁。 但我认为这不是我必须做的最好的方式。 阅读官方留档,我发现我也可以这样做: 在JVM中注册一个关闭挂钩,因此JVM将在JVM退出之前触发Sprin

  • 问题内容: 从官方教程中: 在卸载和销毁组件之前立即调用。使用此方法执行任何必要的清除,例如使计时器无效,取消网络请求或清除在其中创建的所有DOM元素。 我了解“使计时器无效”。可以用终止。但是我不理解“清理在中创建的任何DOM元素”,我可以看到这种情况的示例吗? 问题答案: 如果网络请求发送库支持中止正在进行的网络请求调用,则绝对可以在方法中调用该请求。 但是,与清理元素有关。根据目前的经验,我

  • 问题内容: 我一直在尝试在Node.js中调用D3。我首先尝试使用脚本标签从D3的网站导入d3.v2.js D3的作者建议一个人应该“ npm install d3” …我做到了,我可以在节点控制台中成功调用它: 但是,当尝试使用“ node app.js”从app.js调用它时,我得到: 我意识到,D3的作者在其他地方已经明确规定了应该使用画布: https://github.com/mbost

  • 问题内容: AsyncTask问题 我已经遵循了一些教程,但是对我来说仍然不清楚。这是我目前在代码下面有一些问题的代码。MainActivity调用SomeClassWithHTTPNeeds,然后调用JSONParser(AsyncTask <>) 主要活动: SomeClassWithHTTPNeeds: JSONParser(AsyncTask ) 我在想:—将HTTPRequest放在do

  • 异步任务问题 我已经学习了一些教程,但我仍然不清楚。这是我目前拥有的代码,代码下面有一些问题。MainActivity调用SomeClassWithHTTPNeeds,然后调用JSONParser(异步任务 主要活动: 一些具有HTTP需求的类: JSONParser(异步任务 我在想:---把HTTPRequest放在doInBackground()中; 问题是我不知道如何:让JSONParse

  • 问题内容: 我正在尝试显示一个ProgressBar。 我是Android初学者。 当我按下按钮时,任务应该在后台运行,但是它不会显示ProgressBar。 怎么了 我不明白。 请帮我! 主要活动: 我的任务: 问题答案: 您没有调用的方法。