Preliminary async-dal for Android

// AsyncHandler interface
public interface AsyncHandler {

void onSuccess(Object result);
void onError(Object result);

}

// DAO implementation
public class MyDaoImpl<T, PK> implements Dao {

    // Llamada síncrona
public T find(PK id) {
...
}

// Demás métodos del CRUD

}

// Service implementation with async-calls
public class MyServiceImpl<T, PK> implements Service {

// Implementación del DAO no asíncrona
private MyDaoImpl myDao;

// Llamada asíncrona - No devuelve nada porque el resultado lo manejará el handler
public void findByIdAsync(PK id, AsyncHandler handler) {
FindProxy proxy = new FindProxy(handler);
proxy.execute(id);
}

// Demás métodos del CRUD con firma asíncrona

// Una AsyncTask por cada método del DAO que se
// quiera llamar de forma asíncrona
private class FindProxy extends AsyncTask<PK, Void, T> {

private AsyncHandler _handler;

public FindProxy(AsyncHandler handler) {
this._handler = handler;
}

protected T doInBackground(PK... params) {
T result = this.myDao.find(params[0]);
return result;
}

protected void onPostExecute(T result){
if (result != null) {
this._handler.onSuccess(result);
} else {
this._handler.onError(result);
}
}

}

}


Learn More :