首页 > 解决方案 > 如何为我的数组列表的每个元素运行相同的异步任务?

问题描述

我有一个包含元素的列表,我想在 AsynkTask 中使用 RestTemplate 将列表中的每个元素单独发送到本地数据库服务器。如果我指定要发送的元素,我可以轻松发送它并与我的 AsyncTask 一起使用,但是我想循环所有列表并将所有元素一一发送到我的数据库..我试图在我的 AsyncTask 中做一个“for loop”,但这不起作用,我也尝试在“for loop”中调用 AsyncTask又没有任何反应..这是我使用 RestTemplate 的 Asynctask

    private class SendLigneVente extends AsyncTask<LigneVente, Void, LigneVente>{

    protected void onPreExecute() {
        super.onPreExecute();
    }
    @Override
    protected LigneVente doInBackground(LigneVente... params) {
        try {
            HttpHeaders requestHeaders = new HttpHeaders();
            //solution avec Token
            requestHeaders.add("Content-Type","application/json");
            requestHeaders.add("Accept", "application/json");
            requestHeaders.add("Authorization","Bearer "+AuthToken);
            final String url = StaticUrl+"/api/ligne-ventes";
                RestTemplate restTemplate=new RestTemplate();
                restTemplate.getMessageConverters().add(new MappingJackson2HttpMessageConverter());
                restTemplate.getMessageConverters().add(new StringHttpMessageConverter());
                LigneVente lv=new LigneVente();
                HttpEntity entity = new HttpEntity(lv, requestHeaders);
                ResponseEntity<LigneVente> response = restTemplate.exchange(url, HttpMethod.POST,entity,LigneVente.class);
                return response.getBody();
        }catch (Exception e) {
            Log.e("ScanActivity", e.getMessage(),e);

        }
        return null;
    }
    protected void onPostExecute(LigneVente result) {
    }
}

这是当我在 for 循环中调用我的 AsyncTask 时:

public void onClick(View v) {
            new CreateVente().execute();
            for(int j=0;j<ligneVentes.size();j++){
                LigneVente lv=ligneVentes.get(j);
            new SendLigneVente().execute(lv);}}

标签: androidspringarraylistresttemplateasyncresttemplate

解决方案


什么都没有发生,因为您没有在onPostExecute方法中显示任何反馈

protected void onPostExecute(LigneVente result) {
    Toast.maketext(getContext(),"Uploaded 
    ",Toast.DURATION_SHORT).show();
}

编辑:您没有使用传递给 AsyncTask 的参数

并在 doInBackground 方法中创建一个新对象

LigneVente lv=params[0];

推荐阅读