简体   繁体   English

如何从ASyncTask调用父活动功能完成

[英]How to call parent activity function from ASyncTask finish

I have a MainActivity and an AsyncTask class. 我有一个MainActivity和一个AsyncTask类。 MainActivity works well when I call this myTask. 当我将其称为myTask时,MainActivity可以很好地工作。

But how to call myTask's onPostExecute result from MainActivity. 但是如何从MainActivity调用myTask的onPostExecute结果。

This is my first question, I apologize if I'm wrong. 这是我的第一个问题,如果我错了,我深表歉意。

myTask class myTask类

public  class myTask extends AsyncTask<String, Void, String> {
    ProgressDialog mProgressDialog;
    DownloadCallback mDownloadCallback;
    Exception mException;
    Context mContext;
    JSONArray PHPfromArray= null;
    String status="", message="";
    private OkHttpClient client = new OkHttpClient();


    public myTask(Context context, DownloadCallback downloadCallback) {
        mContext = context;
        mDownloadCallback = downloadCallback;

    }

    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        mProgressDialog = new ProgressDialog(mContext);
        mProgressDialog.setMessage("Downloading.. ");
        mProgressDialog.show();
    }

    @Override
    protected String doInBackground(String... p) {
        String jsonData = null;

        return null;
    }

    @Override
    protected void onPostExecute(String result) {
        mProgressDialog.dismiss();
        if ( result== null )
        {
            mDownloadCallback.onFailure(mException);
        } else {
            mDownloadCallback.onSuccess(durum);
        }
    }



    public interface DownloadCallback
    {
        void onSuccess(String downloadedString);
        void onFailure(Exception exception);
    }
}

This code does not work, how to call from MainActivity? 该代码不起作用,如何从MainActivity调用?

   new myTask(this, new myTask() {
            @Override
            public void onSuccess(String downloadedString) {

            }
            @Override
            public void onFailure(Exception exception) {

            }
        });

You could modify myTask like this: 您可以这样修改myTask

  ....
  public myTask(Context context){
            mContext = context;
  }//firstly modify constructor

  public void setCallback(DownloadCallback downloadCallback){
        mDownloadCallback = downloadCallback;
  }//add a function
  ...

Then you could implements the android in activity like below: 然后,您可以在活动中实现android,如下所示:

public class MainActivity extends AppCompatActivity implements myTask.DownloadCallback {
            ...
            final myTask myTask = new myTask(MainActivity.this);
            myTask.setCallback(MainActivity.this);
            myTask.execute();

            @Override
            public void onSuccess(String downloadedString) {

            }

            @Override
            public void onFailure(Exception exception) {

            }
        }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM