Android异步任务向UI发送回调

Android异步任务向UI发送回调

我有以下异步任务类,它不在活动中。在该活动中,我正在初始化异步任务,并希望异步任务向我的活动报告回调。有可能吗?还是异步任务必须与活动位于同一个类文件中?

protected void onProgressUpdate(Integer... values) {
    super.onProgressUpdate(values);
    caller.sometextfield.setText("bla");}

像这样吗?


qq_遁去的一_1
浏览 552回答 3
3回答

忽然笑

我觉得下面的方法很简单。我已经声明了一个回调接口。public&nbsp;interface&nbsp;AsyncResponse&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;void&nbsp;processFinish(Object&nbsp;output);}然后创建异步任务来响应所有类型的并行请求&nbsp;public&nbsp;class&nbsp;MyAsyncTask&nbsp;extends&nbsp;AsyncTask<Object,&nbsp;Object,&nbsp;Object>&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;AsyncResponse&nbsp;delegate&nbsp;=&nbsp;null;//Call&nbsp;back&nbsp;interface &nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;MyAsyncTask(AsyncResponse&nbsp;asyncResponse)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;delegate&nbsp;=&nbsp;asyncResponse;//Assigning&nbsp;call&nbsp;back&nbsp;interfacethrough&nbsp;constructor &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;@Override &nbsp;&nbsp;&nbsp;&nbsp;protected&nbsp;Object&nbsp;doInBackground(Object...&nbsp;params)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;//My&nbsp;Background&nbsp;tasks&nbsp;are&nbsp;written&nbsp;here &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;{resutl&nbsp;Object} &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;@Override &nbsp;&nbsp;&nbsp;&nbsp;protected&nbsp;void&nbsp;onPostExecute(Object&nbsp;result)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;delegate.processFinish(result); &nbsp;&nbsp;&nbsp;&nbsp;}}然后单击ActivityClass中的按钮时调用异步任务。public&nbsp;class&nbsp;MainActivity&nbsp;extends&nbsp;Activity&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;@Override &nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;void&nbsp;onCreate(Bundle&nbsp;savedInstanceState)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Button&nbsp;mbtnPress&nbsp;=&nbsp;(Button)&nbsp;findViewById(R.id.btnPress); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mbtnPress.setOnClickListener(new&nbsp;View.OnClickListener()&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@Override &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;void&nbsp;onClick(View&nbsp;v)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MyAsyncTask&nbsp;asyncTask&nbsp;=new&nbsp;MyAsyncTask(new&nbsp;AsyncResponse()&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@Override &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;void&nbsp;processFinish(Object&nbsp;output)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Log.d("Response&nbsp;From&nbsp;Asynchronous&nbsp;task:",&nbsp;(String)&nbsp;output);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mbtnPress.setText((String)&nbsp;output); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;asyncTask.execute(new&nbsp;Object[]&nbsp;{&nbsp;"Youe&nbsp;request&nbsp;to&nbsp;aynchronous&nbsp;task&nbsp;class&nbsp;is&nbsp;giving&nbsp;here.."&nbsp;}); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}); &nbsp;&nbsp;&nbsp;&nbsp;}}谢谢

慕莱坞森

在完成上述回答时,还可以为所做的每个异步调用自定义回退,以便每个对通用ASYNC方法的调用都将填充不同的数据,这取决于您在其中放置的onTaskDone内容。&nbsp;&nbsp;Main.FragmentCallback&nbsp;FC=&nbsp;new&nbsp;&nbsp;Main.FragmentCallback(){ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@Override &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;void&nbsp;onTaskDone(String&nbsp;results)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;localText.setText(results);&nbsp;//example&nbsp;TextView &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;};new&nbsp;API_CALL(this.getApplicationContext(),&nbsp;"GET",FC).execute("&Books="&nbsp;+&nbsp;Main.Books&nbsp;+&nbsp;"&args="&nbsp;+&nbsp;profile_id);提醒:我在“main”出现的主活动上使用了接口,如下所示:public&nbsp;interface&nbsp;FragmentCallback&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;void&nbsp;onTaskDone(String&nbsp;results);}我的API POST Execute如下所示:&nbsp;&nbsp;@Override &nbsp;&nbsp;&nbsp;&nbsp;protected&nbsp;void&nbsp;onPostExecute(String&nbsp;results)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Log.i("TASK&nbsp;Result",&nbsp;results); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mFragmentCallback.onTaskDone(results); &nbsp;&nbsp;&nbsp;&nbsp;}API构造函数如下所示:&nbsp;class&nbsp;&nbsp;API_CALL&nbsp;extends&nbsp;AsyncTask<String,Void,String>&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;Main.FragmentCallback&nbsp;mFragmentCallback; &nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;Context&nbsp;act; &nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;String&nbsp;method; &nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;API_CALL(Context&nbsp;ctx,&nbsp;String&nbsp;api_method,Main.FragmentCallback&nbsp;fragmentCallback)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;act=ctx; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;method=api_method; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mFragmentCallback&nbsp;=&nbsp;fragmentCallback; &nbsp;&nbsp;&nbsp;&nbsp;}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Android