5
The class below is responsible for obtaining data from a WCF Rest service:
public class MyAsyncTaskGeneric<T> extends AsyncTask<String, Void, T>{
private final Class<T> typeGeneric;
public MyAsyncTaskGeneric(Class<T> typeGeneric) {
this.typeGeneric = typeGeneric;
}
@Override
protected T doInBackground(String... params) {
T result = null;
try {
RestTemplate restTemplate = new RestTemplate();
restTemplate.getMessageConverters().add(new GsonHttpMessageConverter());
result = restTemplate.getForObject(params[0], typeGeneric);
} catch (Exception e) {
Log.i("Teste", e.getMessage());
}
return result;
}
}
It is consumed by business class:
public class CidadeBll {
public CidadeBll() {
}
public Cidade[] GetCidades(String url) throws Exception {
Cidade[] result = null;
try {
MyAsyncTaskGeneric<Cidade[]> myAsync = new MyAsyncTaskGeneric<Cidade[]>(Cidade[].class);
result = myAsync.execute(url + "/cidades").get();
} catch (Exception e) {
throw e;
}
return result;
}
}
Which in turn is consumed by an Activity:
btnGetCidades.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
try {
CidadeBll cidadeBll = new CidadeBll();
Cidade[] cidades = cidadeBll.GetCidades(url2);
if (cidades.length > 0){
Toast.makeText(getApplicationContext(), "Qtde de Cidades: " + cidades.length, Toast.LENGTH_LONG).show();
}
} catch (Exception e) {
Toast.makeText(getApplicationContext(), "Erro:" + e.getMessage(), Toast.LENGTH_LONG).show();
}
}
});
Considering possible exceptions triggered by WCF Rest, I wish the Asynctask class could trigger the exception for the business class, and the business class for Activity.
That’s possible?
Thanks Ruben!
– Paulo Balbino