Как запустить одну и ту же асинхронную задачу для каждого элемента моего списка массивов? - PullRequest
0 голосов
/ 28 июня 2018

У меня есть список, который содержит элементы, и я хочу отправить каждый элемент моего списка отдельно на локальный сервер базы данных, используя RestTemplate в AsynkTask. Если я указываю, какой элемент я хочу отправить, я могу отправить его легко и работает с мой AsyncTask, но я хочу зациклить весь список и отправить все элементы один за другим в мою базу данных. Я попытался выполнить цикл for внутри моего AsyncTask, но это не сработало, я также попытался вызвать AsyncTask в за цикл "и опять ничего не происходит .. это мой Asynctask с использованием RestTemplate

    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) {
    }
}

и это когда я вызываю свой AsyncTask в цикле for:

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);}}

1 Ответ

0 голосов
/ 30 июня 2018

Ничего не происходит, потому что вы не показываете Обратная связь в onPostExecute метод

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

РЕДАКТИРОВАТЬ: вы не используете параметры, переданные AsyncTask

И создание нового объекта в методе doInBackground

LigneVente lv=params[0];
...