如何在AsyncTask结束时从其他Class调用AsyncTask

时间:2014-12-09 15:55:46

标签: android android-asynctask odata

我有一个被指定使用Odata服务的类,所以我用异步任务创建了4个不同的类,但是我不确定它们是否正确创建(正确),

所以我创建了我的主类,它是更新活动,这一个启动一个AsyncTask,并在后执行方法的这个类的末尾弹出一个进度对话框("连接到服务器") ,我想开始我的后续AsyncTasks,但我没有得到 "我已经尝试了一些我在这里找到的解决方案,例如在执行后调用类调用异步测试,但我没有取得成功",任何人都可以提供帮助吗?"

"我想我以错误的方式创建了我的异步类,所以任何人都可以给我一个方向"

更新活动:

atualiza_base = (Button) findViewById(R.id.update_button);
    atualiza_base.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View arg0) {
            new callService().execute();

        }
    });
}

public class callService extends AsyncTask<Object, Object, String> {

    protected void onPreExecute() {
        progress = ProgressDialog.show(Atualizar_Dados.this, "Aguarde...", "Conectando ao SMP", true, true);

    }

    protected String doInBackground(Object... params) {
        return URL;
    }

    protected void onPostExecute(String result) {
        progress.dismiss();
        AtualizaClientes atualizaClientes = new AtualizaClientes();
        atualizaClientes.callServiceClientes.execute();


    }
}

我的4个AsyncTasks中的一个是相同的,只有不同的服务......

public class AtualizaClientes extends Atualizar_Dados {
ClienteDAO sqlObjCliente;
private ProgressDialog progressC;
ArrayList<OEntity> zmob_kunnr;

ListView listCliente;

 public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    sqlObjCliente = new ClienteDAO(AtualizaClientes.this);

    class callServiceCliente extends AsyncTask<Void, Void, ArrayList<OEntity>> {
        protected void onPreExecute() {
            progressC = ProgressDialog.show(AtualizaClientes.this, "Aguarde...", "Atualizando Clientes", true, true);
        }

        public ArrayList<OEntity> doInBackground(Void... params) {
            ODataConsumer ccli = ODataJerseyConsumer.create(URL);
            List<OEntity> listEntitiesKunnr = ccli.getEntities("ZMOB_KUNNRSet").execute().toList();

            System.out.println("Size" + listEntitiesKunnr.size());

            for (OEntity entityKunnr : listEntitiesKunnr) {
                zmob_kunnr.add(entityKunnr);
            }
            return zmob_kunnr;
        }

        @SuppressLint("DefaultLocale")
        protected void onPostExecute(ArrayList<OEntity> kunnr) {
            super.onPostExecute(kunnr);
            try {
                sqlObjCliente.open();
                sqlObjCliente.deleteCliente();

                for (int k = 0; k < zmob_kunnr.size(); k++) {
         sqlObjCliente.insertCliente(zmob_kunnr.get(k).getProperty("Kunnr").getValue().toString().toUpperCase(), 
                                     zmob_kunnr.get(k).getProperty("Name1").getValue().toString().toUpperCase());
                }
                sqlObjCliente.close();
            } catch (Exception e) {
            }

            progressC.dismiss();
            // new callServiceMaterial().execute();
            //new callServiceProblema();
        }
    }

}

任何帮助将不胜感激,谢谢......

1 个答案:

答案 0 :(得分:0)

要从另一个不同类的AsyncTask调用AsyncTask,只需创建一个简单的接口并管理AsyncTask调用。接口是很好的解决方案。