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

Android,我可以将AsyncTask放在单独的类中并进行回调吗?

丁兴德
2023-03-14
问题内容

我只是在学习AsyncTask,并希望将其用作单独的类,而不是子类。

例如,

class inetloader extends AsyncTask<String, Void, String> {


    @Override
    protected String doInBackground(String... urls) {

        String response = "";

            DefaultHttpClient client = new DefaultHttpClient();
            HttpGet httpGet = new HttpGet(urls[0]);
            try {
                HttpResponse execute = client.execute(httpGet);
                InputStream content = execute.getEntity().getContent();

                BufferedReader buffer = new BufferedReader(
                        new InputStreamReader(content));
                String s = "";
                while ((s = buffer.readLine()) != null) {
                    response += s;
                }

            } catch (Exception e) {
                e.printStackTrace();
            }

        return response;
    }


    @Override
    protected void onPostExecute(String result) {
        Log.e("xx",result);
        // how do I pass this result back to the thread, that created me?
    }


}

和main(ui)线程:

inetloader il = new inetloader();
il.execute("http://www.google.com");
//il.onResult()
//{
    ///do something...
//}

谢谢!


问题答案:

使用界面。就像是:

interface CallBackListener{
  public void callback();
}

然后在您的UI线程中执行此操作:

inetloader il = new inetloader();
li.setListener(this);
il.execute("http://www.google.com");

在inetloader中,添加:

   CallBackListener mListener;

   public void setListener(CallBackListener listener){
     mListener = listener;
   }

然后在postExecute()中,执行以下操作:

   mListener.callback();


 类似资料:
  • 问题内容: 我一直在尝试各种示例,以使自己熟悉AsyncTask。到目前为止,我所看到的所有示例都将AsyncTask包含在主要活动的onCreate方法中。我不太喜欢,所以我想看看将其分成自己的班级会有多困难。到目前为止,我有这个: 的 主要活动 新的单独的 AsyncTask类 最初,这些都在主要活动中,因此提到了asynctask在理论上应该更新的要素。显然,目前这会导致运行时错误,这让我开

  • 问题内容: 我有几个在单个WebLogic集群中运行的J2EE应用程序实例。 在某些时候,这些应用程序会进行合并以将记录插入或更新到后端Oracle数据库中。MERGE检查是否存在具有指定主键的行。如果在那里,请更新。如果没有,请插入。 现在,假设有两个应用程序实例要插入或更新主键= 100的行。假设该行不存在。在合并的“检查”阶段,他们都看到行不在此处,因此他们都试图插入。然后,我得到了唯一的键

  • 我可以添加多个AsyncTask并同时执行吗?我可以从主activity开始执行多个Asynctask,如下所示。 公共类接收器扩展广播接收器{ } 在这段代码中,我得到了所有的日志,但在此之后,它将不会在AsyncTask的doInBackground()方法中运行。我在每个类方法doInBackground()中设置了Log,但没有一个在Log中被命中(意味着没有一个方法被执行)。 我的问题是

  • 问题内容: 在运行该行之后,在指令指针返回到调用函数之前,是否可以看到方法的返回值? 我正在调试无法修改的代码 (阅读:不想重新编译第三方库) ,有时它会跳转到我没有源代码的代码,或者return表达式具有使我无法继续工作的副作用只需在“ 显示” 标签中运行表达式即可。 通常在复合语句中使用返回值,因此 Variables 视图将永远不会向我显示该值(因此希望在控件返回到调用函数之前先查看结果)。

  • 问题内容: 我正在尝试修改cloudinary的开源库,以便可以收听照片上传的进度。该库类包含一个MultipartUtility Java类,我对该类进行了修改以侦听上传进度。 修改前的原始代码可以在github上找到:https : //github.com/cloudinary/cloudinary_java/blob/master/cloudinary- android/src/main/

  • 问题内容: 是否可以发送jQuery.ajax调用或等效调用而没有任何形式的响应?当我使用onbeforeunload命令离开页面时,我想在服务器上触发一些操作,但这不是我需要反馈给客户端的操作,因此我只想发送该命令而不等待响应。 那可能吗? 问题答案: 每个请求都有一个响应。 即使服务器抛出错误,响应也会返回错误。 如果您只想不添加回调,则可以忽略响应。