अंत में यह काम करता है, समाधान सिर्फ AsyncTask का विस्तार करने के लिए है, क्योंकि Android रन टाइम एनवायरमेंट को फ्रोजन प्रक्रिया से बचाता है, इसलिए जब आप AsyncTask को एक और पैरालेल थ्रेड शुरू करते हैं, तो रिज्यूमे में आपको कनेक्शन क्लास को इस तरह विस्तारित करना होगा:
public class PostgreSqlJDBC extends AsyncTask <Void, Void, Void> {
static String cadenaConexion = "jdbc:postgresql://YOUR_HOST/YOUR_BDD?" + "user=postgres&password=YOURPASSWORD";
static String respuestaSql= "vacia";
public PruebaConn() {
}
public String getRespuestaSql (){
execute();
return respuestaSql;
}
@Override
public Void doInBackground(Void... params) {
Connection conexion = null;
Statement sentencia = null;
ResultSet resultado = null;
try {
Class.forName("org.postgresql.Driver");
conexion = DriverManager.getConnection(cadenaConexion);
sentencia = conexion.createStatement();
String consultaSQL = "SELECT * FROM activities";
resultado = sentencia.executeQuery(consultaSQL);
respuestaSql = "";
while (resultado.next()) {
int id = resultado.getInt("IdActivity");
String Nombre = resultado.getString("NameActivity");
respuestaSql = respuestaSql + id + " | " + Nombre + "\n";
}
} catch (Exception e) {
e.printStackTrace();
System.err.println(e.getMessage());
System.err.println("Error: Cant connect!");
conexion = null;
} finally {
if (resultado != null) {
try {
resultado.close();
} catch (Exception e) {
e.printStackTrace();
System.err.println(e.getMessage());
}
}
if (sentencia != null) {
try {
sentencia.close();
} catch (Exception e) {
e.printStackTrace();
System.err.println(e.getMessage());
}
}
if (conexion != null) {
try {
conexion.close();
} catch (Exception e) {
e.printStackTrace();
System.err.println(e.getMessage());
}
}
}
System.err.println("----- PostgreSQL query ends correctly!-----");
return null;
}
}