Uso de Callbacks
-
Primero veremos.
1.1 ¿Qué es un Callback? Los callbacks, son conocidas como "llamadas de vuelta", con un valor especifico añadido, el cual se puede ejecutar y obtener este mismo valor
Aquí te enseñaremos como obtener un valor especifico usando un task Asynchronously desde una base de datos.
Ejemplo sin uso de Callbacks
Code (Text):public static void getTop(String column){
Bukkit.getScheduler().runTaskAsynchronously(Core.core, new Runnable() {
@Override
public void run() {
String query = "SELECT username, "+column+" FROM bedwars ORDER BY ("+column+") DESC LIMIT 10";
PreparedStatement ps = null;
ResultSet rs = null;
try {
ps = database.getConnection().prepareStatement(query);
rs = database.executeQuery(ps);
List<String> top = Lists.newArrayList();
if(rs.next()){
String username = rs.getString("username");
int amount = rs.getInt(column);
top.add(username+":"+amount);
}
return top;
}catch(Exception e){
e.printStackTrace();
}finally {
try {
ps.close();
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
});
}
Pues sencillo crearemos nuestro callback usando interfaces
public interface Callback<T> {
void done(T valor);
}
"T" es el Objeto que vamos a asignar, ya sea Lista, Integer, Boolean, String, HashMap entre otros.
Usando el callback para obtener el top
Code (Text):public static void getTop(String column, Callback<List<String>> callback){
Bukkit.getScheduler().runTaskAsynchronously(Core.core, new Runnable() {
@Override
public void run() {
String query = "SELECT username, "+column+" FROM bedwars ORDER BY ("+column+") DESC LIMIT 10";
PreparedStatement ps = null;
ResultSet rs = null;
try {
ps = Core.sql.getConnection().prepareStatement(query);
rs = Core.sql.executeQuery(ps);
List<String> top = Lists.newArrayList();
if(rs.next()){
String username = rs.getString("username");
int amount = rs.getInt(column);
top.add(username+":"+amount);
}
callback.done(top);
}catch(Exception e){
e.printStackTrace();
}finally {
try {
ps.close();
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
});
}
Función
Code (Text):StatsManager.getTop("final_kills", new Callback<List<String>>() {
@Override
public void done(List<String> done) {
for(String post : done){
System.out.println(post); // Imprimir en la consola la lista.
}
}
}); - Loading...
- Loading...
XenCarta PRO
© Jason Axelrod from 8WAYRUN.COM