bom dia pessoal!
Meu Problema:
Eu criei uma AsyncTask meio que genérica, para se comunicar com meu WebService e Persistir os dados no meu SQL, independente do endereço do WebService.
estpa funcionando em meu projeto perfeitamente! segue a classe:
package br.com.cooperrubi.webservices;
import org.json.JSONArray;
import org.json.JSONException;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.os.AsyncTask;
import android.widget.ProgressBar;
import android.widget.TextView;
import br.com.cooperrubi.DAO.Dao;
import br.com.cooperrubi.postocomboio.R;
import br.com.cooperrubi.postocomboio.regrasDeNegocios.Endereco;
import br.com.cooperrubi.postocomboio.regrasDeNegocios.JsonConvert;
/**
* @author Ricardo Bras
* @02/07/2013 IFieldMobile
* @param <E>
*/
@SuppressLint("NewApi")
public class TaskDownloadJson<E> extends AsyncTask<String, Integer, Long> {
private ProgressBar progressbar;
private Dao<E> dao;
private Class<?> classe;
private TextView textView;
boolean pessoa = false;
private JSONArray JSONArray;
public TaskDownloadJson(Activity activity, Dao<E> dao, Class<?> clazz) {
progressbar = (ProgressBar) activity.findViewById(R.id.progressBar);
this.dao = dao;
this.classe = clazz;
textView = (TextView) activity.findViewById(R.id.txt_progressBar);
textView.setText("Atualizando.... " + clazz.getSimpleName());
}
@Override
protected void onPreExecute() {
progressbar.setProgress(0);
textView.setVisibility(TextView.VISIBLE);
progressbar.setVisibility(ProgressBar.VISIBLE);
}
@Override
protected Long doInBackground(String... params) {
atualizar(params[0]);
return null;
}
@Override
protected void onProgressUpdate(Integer... values) {
progressbar.setProgress(values[0]);
}
@Override
protected void onPostExecute(Long result) {
progressbar.setVisibility(ProgressBar.INVISIBLE);
textView.setText(classe.getSimpleName() + " Atualizado...");
textView.setVisibility(TextView.INVISIBLE);
}
// Metodo para atualizar oo bd SQLITE
public void atualizar(String url) {
String json = new DownloadJson().getRESTFileContent(Endereco.getServidorREST() + url);
if (json != "") {
dao.deleteAll();
try {
JSONArray = new JSONArray(json);
int tamanhoArray = JSONArray.length();
// percorrer o array e gravar o objeto ao bd
for (int i = 0; i < JSONArray.length(); i++) {
@SuppressWarnings("unchecked")
E object2 = ((E) JsonConvert.toObject(
JSONArray.getString(i), classe));
E object = object2;
dao.insert(object);
publishProgress((int) (i / ((float) tamanhoArray) * 100));
}
} catch (JSONException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
}
}
até aí está uma maravilha. Na minha Activity executo da seguinte forma:
new TaskDownloadJson<Posto>(this, postoDao, Posto.class).execute(Endereco.nomeJSONPosto);
e funciona normal para atualizar, mas quando eu executo dois ao mesmo tempo exemplo:
new TaskDownloadJson<Posto>(this, postoDao, Posto.class).execute(Endereco.nomeJSONPosto);
new TaskDownloadJson<Pessoas>(this, pessoaDao, Pessoas.class).execute(Endereco.nomeJSONPessoa);
trava tudo!!!
eu sei que o processo e concorrente, e funciona como thread em background no android. mas eu quero que execute cada AsyncTask de uma vez e não as duas ao mesmo tempo!
ou seja, espera a primeira terminar para rodar a segunda!
como se faz isso? alguma dica?
vlw obrigado!