【问题标题】:Android Asyntask, second parameter is sending information before of firstAndroid Asyntask,第二个参数是第一个之前的发送信息
【发布时间】:2017-06-09 13:01:36
【问题描述】:

我需要使用 SOAP 请求从“layer_1”获取 Async 方法的信息,然后再从“layer_2”接收信息,但有时它会反过来发生,有什么方法可以让“layer_2”等待“layer_1”结束了吗?

这是我的 AsyncTask:

  protected Void doInBackground(String... params) {

        String ope = params[0];
        switch (ope)
        {
            case "layer_1":
                if(Util.isNetworkAvailable(mContext.getApplicationContext()))
                {
                    getWebservice = WebService.getLayer(COD_MATRICULA);
                    changeAsync = true;
                }
                break;
            case "layer_2":
                if (Util.isNetworkAvailable(mContext.getApplicationContext())) {
                    if(canMade)
                        message = addUserWeb(User);
                    changeAsync = true;
                    callMessage = true;
                }
                else
                {
                    message = null;
                    changeAsync = false;
                }
                break;
        }
        publishProgress();
        return null;
    }

在我的进度更新中:

    protected void onProgressUpdate(Void... values) {

        if (changeAsync)
            verifyUser();

        if(callMessage)
        {
            .......
            callMessage = false;
        }

    }

【问题讨论】:

    标签: android soap android-asynctask


    【解决方案1】:

    您可以在项目中使用两个 asyncTask,如下所示

    //layer_1 
    private class AsyncTaskRunner1 extends AsyncTask<String, String, String> {
    
        @Override
        protected void onPreExecute() {
        }
    
        @Override
        protected String doInBackground(String... params) {
           if(Util.isNetworkAvailable(mContext.getApplicationContext()))
                {
                    getWebservice = WebService.getLayer(COD_MATRICULA);
                    changeAsync = true;
                }
    
        }
    
        @Override
        protected void onPostExecute(String result) {
            AsyncTaskRunner2 myTask = new AsyncTaskRunner2();
            myTask.execute();
        }
    }
    
    //layer_2 
    private class AsyncTaskRunner2 extends AsyncTask<String, String, String> {
    
        @Override
        protected void onPreExecute() {
        }
    
        @Override
        protected String doInBackground(String... params) {
           if (Util.isNetworkAvailable(mContext.getApplicationContext())) {
                    if(canMade)
                        message = addUserWeb(User);
                    changeAsync = true;
                    callMessage = true;
                }
    
        }
    
        @Override
        protected void onPostExecute(String result) {
    
        }
    }
    

    【讨论】:

    • 我想过,但可行吗?
    猜你喜欢
    • 2018-11-23
    • 2016-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-22
    • 1970-01-01
    相关资源
    最近更新 更多