为了账号安全,请及时绑定邮箱和手机立即绑定

Android异步任务向UI发送回调

Android异步任务向UI发送回调

qq_遁去的一_1 2019-06-06 13:08:53
Android异步任务向UI发送回调我有以下异步任务类,它不在活动中。在该活动中,我正在初始化异步任务,并希望异步任务向我的活动报告回调。有可能吗?还是异步任务必须与活动位于同一个类文件中?protected void onProgressUpdate(Integer... values) {     super.onProgressUpdate(values);     caller.sometextfield.setText("bla");}像这样吗?
查看完整描述

3 回答

?
忽然笑

TA贡献1806条经验 获得超5个赞

我觉得下面的方法很简单。

我已经声明了一个回调接口。

public interface AsyncResponse {
    void processFinish(Object output);}

然后创建异步任务来响应所有类型的并行请求

 public class MyAsyncTask extends AsyncTask<Object, Object, Object> {

    public AsyncResponse delegate = null;//Call back interface

    public MyAsyncTask(AsyncResponse asyncResponse) {
        delegate = asyncResponse;//Assigning call back interfacethrough constructor
    }

    @Override
    protected Object doInBackground(Object... params) {

    //My Background tasks are written here

      return {resutl Object}

    }

    @Override
    protected void onPostExecute(Object result) {
        delegate.processFinish(result);
    }}

然后单击ActivityClass中的按钮时调用异步任务。

public class MainActivity extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {

        Button mbtnPress = (Button) findViewById(R.id.btnPress);

        mbtnPress.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {

                MyAsyncTask asyncTask =new MyAsyncTask(new AsyncResponse() {

                    @Override
                    public void processFinish(Object output) {
                        Log.d("Response From Asynchronous task:", (String) output);          
                        mbtnPress.setText((String) output);
                    }
                });
                asyncTask.execute(new Object[] { "Youe request to aynchronous task class is giving here.." });

            }
        });
    }}

谢谢


查看完整回答
反对 回复 2019-06-06
?
慕莱坞森

TA贡献1810条经验 获得超4个赞

在完成上述回答时,还可以为所做的每个异步调用自定义回退,以便每个对通用ASYNC方法的调用都将填充不同的数据,这取决于您在其中放置的onTaskDone内容。

  Main.FragmentCallback FC= new  Main.FragmentCallback(){
            @Override
            public void onTaskDone(String results) {

                localText.setText(results); //example TextView
            }
        };new API_CALL(this.getApplicationContext(), "GET",FC).execute("&Books=" + Main.Books + "&args=" + profile_id);

提醒:我在“main”出现的主活动上使用了接口,如下所示:

public interface FragmentCallback {
    public void onTaskDone(String results);}

我的API POST Execute如下所示:

  @Override
    protected void onPostExecute(String results) {

        Log.i("TASK Result", results);
        mFragmentCallback.onTaskDone(results);

    }

API构造函数如下所示:

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

    private Main.FragmentCallback mFragmentCallback;
    private Context act;
    private String method;


    public API_CALL(Context ctx, String api_method,Main.FragmentCallback fragmentCallback) {
        act=ctx;
        method=api_method;
        mFragmentCallback = fragmentCallback;


    }


查看完整回答
反对 回复 2019-06-06
  • 3 回答
  • 0 关注
  • 551 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信