Acceder

Ver la Versión Completa : Atacar a MySQL directamente ANDROID


softruz
16/09/11, 09:54:59
Muy buenas, estoy buscando algún código para que podamos acceder a MySQL con Android directamente (sin PHP), se puede usar JDBC para ello?

Un Saludo.

kriogeN
16/09/11, 12:12:09
No se puede, al menos con el SDK básico, existen SDKs de pago que si permiten la conexión a distintos tipos de bases de datos (incluido MySQL), que lo que hacen es programar el "driver" dentro de sus librerías y a ti te facilitan el API.

El motivo por el que ocurre esto (al menos es mi teoría) es la guerra existente entre Oracle y Google por la demanda que le ha puesto la primera a la segunda por violar las patentes de Java (en mi opinión sin fundamento, pero eso lo tendrá que decir un juez).

Yo esto lo he resuelto creando una página PHP a la que mediante POST le mando la sentencia SQL (si, inseguridad a tope, pero es lo que hay), y luego el resultado lo recojo en un JSON.

Para amortiguar el efecto lo mejor sería crear vistas y que el usuario en el PHP solo tenga acceso a esas vistas.

softruz
19/09/11, 09:55:01
Muy buenas, alguien sabe alguna librería de pago para haga esto y no tener que usar PHP.

Un Saludo.

RubenGM85
20/09/11, 17:31:20
Descarga el conector oficial y gratuito de MySQL para Java (link (http://mirrors.ircam.fr/pub/mysql/Downloads/Connector-J/mysql-connector-java-5.1.17.zip)) y haz algo tal que así:


private Connection conecta() {
try {
String url = "jdbc:mysql://IPdelServidor:3306/nombre_de_base_de_datos";
con = (Connection) DriverManager.getConnection( url,"usuario", "password");
} catch (Exception e) {
}
}

Para hacer una query:


try {
PreparedStatement st = (PreparedStatement)con.prepareStatement("SELECT * FROM tabla WHERE algo LIKE ?");
st.setString(1, "algunString");
ResultSet res = st.executeQuery();
res.first();
while(!res.isAfterLast()) {
int id = res.getInt("id");
String nombre = res.getString("campoNombre");
//etc
res.next();
}
} catch (Exception e) {
Log(e);
}

¿Quieres hacer un UPDATE o DELETE?

try {
//Si tienes un String con la query entera, usa Statement. Si tienes que meterle variables usa PreparedStatement
st = (Statement)con.createStatement();
st.execute("DELETE FROM tabla WHERE id = 800"); //o p.ej.: UPDATE tabla SET meh = 'asd' WHERE id = 2
st.close();
} catch (Exception e) {
Log(e);
}

Recuerda acabar siempre haciendo .close() de las conexiones, los results y los statements.

softruz
22/09/11, 10:04:45
Muchas gracias, me podrias decir, ¿ como instalo lo que me tengo que descargar en eclipse?

softruz
22/09/11, 10:06:16
o mejor tendrías un projecto pequeño con todo esto para yo ver como se hace, la cuestion es que ya lo he intentado pero no me lee el .jar de java mysql.

Un Saludo y mil gracias.

RubenGM85
22/09/11, 10:07:50
Botón derecho en el proyecto - Properties - Java Build Path - Add External JARs

softruz
22/09/11, 10:38:54
Muchas Gracias por todo ya te comento cuando lo pruebe.

Un Saludo.

L3st
23/09/11, 15:37:14
Muy buena, la verdad es que yo he usado JS con JSON y es bastante bastante complicado

jmico
27/09/11, 00:10:31
Alguien que haya probado esta solución y le funcione.
Al generar el proyecto (BUILD) da el siguiente error.


Conversion to Dalvik format failed with error 1.


Saludos y gracias.

jmico
04/10/11, 16:25:07
Alguien que haya podido acceder a MySQL desde Android, como lo ha hecho.
Versiones de JDBC, Eclipse y demás.
Saludos y gracias.

RubenGM85
04/10/11, 17:21:35
Alguien que haya probado esta solución y le funcione.
Al generar el proyecto (BUILD) da el siguiente error.


Conversion to Dalvik format failed with error 1.


Saludos y gracias.

Vaya, no me avisó de este mensaje :S

Ese error lo he visto a veces por XMLs incorrectos, por poner mayúsculas donde no deja o cosas así. Abre la vista de errores y busca dónde ha fallado la conversión a Dalvik.

jmico
04/10/11, 18:09:06
Vaya, no me avisó de este mensaje :S

Ese error lo he visto a veces por XMLs incorrectos, por poner mayúsculas donde no deja o cosas así. Abre la vista de errores y busca dónde ha fallado la conversión a Dalvik.


Ok, gracias en cuanto lo pruebe digo algo pues creo que es un tema interesante. (Para mi mucho).
Saludos Jose.

capovich
17/02/12, 22:18:25
Buenas tardes soy nuevo por estas zonas,

Estoy realizando una aplicación en android que requiero conectarla a una base de datos mysql pero no logro hacerlo

mi pregunta es si alguno de uds tiene un ejemplo ya realizado, algo sencillo incluir eliminar modificar solo dos campos con lo demas tratare de ver como me las arreglo

Gracias de antemano.

russellhoff
09/02/13, 11:41:39
Buenos días amigos. Quizás vengo algo tarde pero bueno.

Estoy con mi proyecto fin de carrera, empezando,y me he dado cuenta de que hay 2 formas de conectarse a una base de datos externa:

- Crear un servicio web (soap o rest) e invocarlo en la app de android.
- Crear un script o programilla que responda a peticiones HTTP get o post (como han dicho arriba, más o menos).

[ Enlace: http://stackoverflow.com/questions/9904742/android-connect-to-mysql-database-directly-using-mysql-connector ]

Ejemplo: http://codeoncloud.blogspot.com.es/2012/03/android-mysql-client.html
Seguiré investigando.

rinxe
10/02/13, 16:50:16
Tengo una pregunta para los que entendeis este tema.

Que desventajas tiene usar una conexion a MySQL a traves de scripts php??
Aunque el servidor sea contratado y con un buen cortafuegos??

Yo de momento voy tirando con este metodo, GET y POST.

mocelet
10/02/13, 17:10:02
Tengo una pregunta para los que entendeis este tema.

Que desventajas tiene usar una conexion a MySQL a traves de scripts php??
Aunque el servidor sea contratado y con un buen cortafuegos??

Yo de momento voy tirando con este metodo, GET y POST.

A priori ninguna, el pecado es conectarse directamente desde Android porque significa meter el usuario y la clave de la base de datos en el código de la aplicación, que si te lo descompilan te hacen la pascua.

Mientras haya seguridad, da igual si es un script de PHP, si es un web service o si te inventas un protocolo basado en sockets TCP, por ejemplo.

rinxe
10/02/13, 17:22:19
A priori ninguna, el pecado es conectarse directamente desde Android porque significa meter el usuario y la clave de la base de datos en el código de la aplicación, que si te lo descompilan te hacen la pascua.

Mientras haya seguridad, da igual si es un script de PHP, si es un web service o si te inventas un protocolo basado en sockets TCP, por ejemplo.

Ya se por donde va el tema, en mi caso me cedieron un hosting y dominio de 1&1 y ahi es donde alojo los scripts php, en la aplicacion simplemente le indico la direccion web de ese script.

kriogeN
10/02/13, 17:25:03
Tengo una pregunta para los que entendeis este tema.

Que desventajas tiene usar una conexion a MySQL a traves de scripts php??
Aunque el servidor sea contratado y con un buen cortafuegos??

Yo de momento voy tirando con este metodo, GET y POST.

No es que tenga desventajas, es que es la forma correcta de hacerlo.

Yo ahora además uso OAuth al iniciar la conexión, obtienes los 2 tokens y eso es lo que usas durante esa sesión.

rinxe
10/02/13, 17:37:00
No es que tenga desventajas, es que es la forma correcta de hacerlo.

Yo ahora además uso OAuth al iniciar la conexión, obtienes los 2 tokens y eso es lo que usas durante esa sesión.

Okk, es que esto de ir de autonomo aprendiendo a programar, es jodido ehh, jejej. Sin nadie que te ayude, solo a traves de ejemplos. Pero bueno se puede decir que le voy pegando bastante.

Desconocia tambien lo de OAuth pero ya le estoy hechando un ojo en Android Developers. gracias por la info

En mi caso la putada es que no se nada de php, lo tengo hecho a traves de ejemplos modificandolos un poco y consultado una columna entera. Si el ultimo registro es igual al de mi base de datos, la app no hace nada y sino lo actualiza.

El tema seria hacer una consulta al ultimo registro de MySQL y si no esta en la base de datos, que se actualice, para consumir los minimos recursos de red.

johmq
17/05/13, 12:08:07
Buenas, estoy desarrollando una aplicacion android donde primeramente se comprueba con un login si el usuario esta registrado en la db, y despues se comprueba las rutinas que tiene asignadas. Inicialmente lo hice con dos proyectos independientes, y funcionan perfectamente, pero al unirlos (priomero el login y despues la consulta), me da una serie de errores de los que desconozco su causa.
El login lo hace correctamente (las 4 primeras lineas del log), pero despues falla en cosultar las rutinas :

05-17 09:37:28.855: E/getpostresponse(1171): result= [{"logstatus":"1"}]
05-17 09:37:29.872: E/loginstatus(1171): logstatus= 1
05-17 09:37:29.872: E/loginstatus(1171): valido
05-17 09:37:29.876: E/onPostExecute=(1171): ok
05-17 09:52:03.297: E/AndroidRuntime(1457): FATAL EXCEPTION: main
05-17 09:52:03.297: E/AndroidRuntime(1457): java.lang.RuntimeException: Unable to instantiate application android.app.Application: java.lang.NullPointerException
05-17 09:52:03.297: E/AndroidRuntime(1457): at android.app.LoadedApk.makeApplication(LoadedApk.ja va:504)
05-17 09:52:03.297: E/AndroidRuntime(1457): at android.app.ActivityThread.handleBindApplication(A ctivityThread.java:4364)
05-17 09:52:03.297: E/AndroidRuntime(1457): at android.app.ActivityThread.access$1300(ActivityThr ead.java:141)
05-17 09:52:03.297: E/AndroidRuntime(1457): at android.app.ActivityThread$H.handleMessage(Activit yThread.java:1294)
05-17 09:52:03.297: E/AndroidRuntime(1457): at android.os.Handler.dispatchMessage(Handler.java:99 )
05-17 09:52:03.297: E/AndroidRuntime(1457): at android.os.Looper.loop(Looper.java:137)
05-17 09:52:03.297: E/AndroidRuntime(1457): at android.app.ActivityThread.main(ActivityThread.jav a:5041)
05-17 09:52:03.297: E/AndroidRuntime(1457): at java.lang.reflect.Method.invokeNative(Native Method)
05-17 09:52:03.297: E/AndroidRuntime(1457): at java.lang.reflect.Method.invoke(Method.java:511)
05-17 09:52:03.297: E/AndroidRuntime(1457): at com.android.internal.os.ZygoteInit$MethodAndArgsCa ller.run(ZygoteInit.java:793)
05-17 09:52:03.297: E/AndroidRuntime(1457): at com.android.internal.os.ZygoteInit.main(ZygoteInit .java:560)

Alguien sabe a que puede ser debido? que hago mal? os pongo el codigo

package test.Droidlogin;

import java.util.ArrayList;
import org.apache.http.NameValuePair;
import org.apache.http.message.BasicNameValuePair;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import test.Droidlogin.library.Httppostaux;
import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.SystemClock;
import android.os.Vibrator;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

HiScreen y login estan en el paquete testdroidlogin
Httppostaux esta en un paquete aparte. ( es la clase que utilizo para hacer las consultas)

public class Login extends Activity {


EditText user;
EditText pass;
Button blogin;
TextView registrar;
Httppostaux post;
// String URL_connect="http://www.scandroidtest.site90.com/acces.php";
String IP_Server="10.0.2.2";//IP DE NUESTRO PC 192.168.1.10
String URL_connect="http://"+IP_Server+"/droidlogin2/acces.php";//ruta en donde estan nuestros archivos

boolean result_back;
private ProgressDialog pDialog;

@Override
public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);
setContentView(R.layout.main);
post=new Httppostaux();

user= (EditText) findViewById(R.id.edusuario);
pass= (EditText) findViewById(R.id.edpassword);
blogin= (Button) findViewById(R.id.Blogin);
// registrar=(TextView) findViewById(R.id.link_to_register);

//Login button action
blogin.setOnClickListener(new View.OnClickListener(){

public void onClick(View view){

//Extreamos datos de los EditText
String usuario=user.getText().toString();
String passw=pass.getText().toString();

//verificamos si estan en blanco
if( checklogindata( usuario , passw )==true){

//si pasamos esa validacion ejecutamos el asynctask pasando el usuario y clave como parametros

new asynclogin().execute(usuario,passw);


}else{
//si detecto un error en la primera validacion vibrar y mostrar un Toast con un mensaje de error.
err_login();
}

}
});

// registrar.setOnClickListener(new View.OnClickListener(){
//
// public void onClick(View view){
//
// //Abre el navegador al formulario adduser.html
// String url = "http://"+IP_Server+"/droidlogin/adduser.html";
// Intent i = new Intent(Intent.ACTION_VIEW);
// i.setData(Uri.parse(url));
// startActivity(i);
// }
// });

}

//vibra y muestra un Toast
public void err_login(){
Vibrator vibrator =(Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
vibrator.vibrate(200);
Toast toast1 = Toast.makeText(getApplicationContext(),"Error:Nombre de usuario o password incorrectos", Toast.LENGTH_SHORT);
toast1.show();
}


/*Valida el estado del logueo solamente necesita como parametros el usuario y passw*/
public boolean loginstatus(String username ,String password ) {
int logstatus=-1;

/*Creamos un ArrayList del tipo nombre valor para agregar los datos recibidos por los parametros anteriores
* y enviarlo mediante POST a nuestro sistema para relizar la validacion*/
ArrayList<NameValuePair> postparameters2send= new ArrayList<NameValuePair>();

postparameters2send.add(new BasicNameValuePair("usuario",username));//usuario
postparameters2send.add(new BasicNameValuePair("password",password));//password

//realizamos una peticion y como respuesta obtenes un array JSON
JSONArray jdata=post.getserverdata(postparameters2send, URL_connect);

/*como estamos trabajando de manera local el ida y vuelta sera casi inmediato
* para darle un poco realismo decimos que el proceso se pare por unos segundos para poder
* observar el progressdialog
* la podemos eliminar si queremos
*/
SystemClock.sleep(950);

//si lo que obtuvimos no es null
if (jdata!=null && jdata.length() > 0){

JSONObject json_data; //creamos un objeto JSON
try {
json_data = jdata.getJSONObject(0); //leemos el primer segmento, en nuestro caso el unico
logstatus=json_data.getInt("logstatus");//accedemos al valor
Log.e("loginstatus","logstatus= "+logstatus);//muestro por log que obtuvimos
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

//validamos el valor obtenido
if (logstatus==0){// [{"logstatus":"0"}]
Log.e("loginstatus ", "invalido");
return false;
}
else{// [{"logstatus":"1"}]
Log.e("loginstatus ", "valido");
return true;
}

}else{ //json obtenido invalido verificar parte WEB.
Log.e("JSON ", "ERROR");
return false;
}

}


//validamos si no hay ningun campo en blanco
public boolean checklogindata(String username ,String password ){

if (username.equals("") || password.equals("")){
Log.e("Login ui", "checklogindata user or pass error");
return false;

}else{

return true;
}

}

/* CLASE ASYNCTASK
*
* usaremos esta para poder mostrar el dialogo de progreso mientras enviamos y obtenemos los datos
* podria hacerse lo mismo sin usar esto pero si el tiempo de respuesta es demasiado lo que podria ocurrir
* si la conexion es lenta o el servidor tarda en responder la aplicacion sera inestable.
* ademas observariamos el mensaje de que la app no responde.
*/

class asynclogin extends AsyncTask< String, String, String > {

String user,pass;
protected void onPreExecute() {
//para el progress dialog
pDialog = new ProgressDialog(Login.this);
pDialog.setMessage("Autenticando....");
pDialog.setIndeterminate(false);
pDialog.setCancelable(false);
pDialog.show();
}

protected String doInBackground(String[]params) {
//obtnemos usr y pass
user=params[0];
pass=params[1];

//enviamos y recibimos y analizamos los datos en segundo plano.
if (loginstatus(user,pass)==true){
return "ok"; //login valido
}else{
return "err"; //login invalido
}

}

/*Una vez terminado doInBackground segun lo que halla ocurrido
pasamos a la sig. activity
o mostramos error*/
protected void onPostExecute(String result) {

pDialog.dismiss();//ocultamos progess dialog.
Log.e("onPostExecute=",""+result);

if (result.equals("ok")){

Intent i=new Intent(Login.this, HiScreen.class);
i.putExtra("user",user);
startActivity(i);

}else{
err_login();
}

}

}

}



public class HiScreen extends Activity {
String user;
TextView txt_usr;
Button atras;
String IP_Server="10.0.2.2";//IP DE NUESTRO PC 192.168.1.10
String URL_connect="http://"+IP_Server+"/consultarutinasusuario/prueba.php";
private ProgressDialog pDialog;
Httppostaux post;

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);
setContentView(R.layout.lay_screen);

txt_usr= (TextView) findViewById(R.id.usr_name);
atras= (Button) findViewById(R.id.atras);

Bundle extras = getIntent().getExtras();
//Obtenemos datos enviados en el intent.
if (extras != null) {
user = extras.getString("user");//usuario
}else{
user="error";
}

txt_usr.setText(user);//cambiamos texto al nombre del usuario logueado

atras.setOnClickListener(new View.OnClickListener(){

public void onClick(View view){

new asyncRutina().execute("2");
}
});
}

public void comprueba(String id_usuario) {

int id__usuario;
int id_rutina;
int [] rutinas;
/*Creamos un ArrayList del tipo nombre valor para agregar los datos recibidos por los parametros anteriores
* y enviarlo mediante POST a nuestro sistema para relizar la validacion*/
ArrayList<NameValuePair> postparameters2send= new ArrayList<NameValuePair>();
postparameters2send.add(new BasicNameValuePair("id_usuario",id_usuario));//usuario
//realizamos una peticion y como respuesta obtenes un array JSON
JSONArray jdata=post.getserverdata(postparameters2send, URL_connect);
Log.e("El resultado devuelto en login->","JSONArray ="+jdata);

rutinas = new int[jdata.length()];

if (jdata!=null && jdata.length() > 0 ){

Log.e("despues del if","hasta aqui llega");
JSONObject json_data; //creamos un objeto JSON
Log.e("despues crear el objeto JSON","hasta aqui llega");
try {
Log.e("Entramos en el try","hasta aqui llega");
for(int i=0;i<jdata.length();i++){
json_data = jdata.getJSONObject(i);
rutinas[i]=json_data.getInt("Id_Rutina");
Log.e("Id rutina"+(i+1),""+rutinas[i]);
id__usuario=json_data.getInt("Id_Usuario");
//Log.e("Id Usuario",""+id__usuario);

}
} catch (JSONException e) {
e.printStackTrace();
}


}else{ //json obtenido invalido verificar parte WEB.
Log.e("JSON ", "ERROR");

}

}
class asyncRutina extends AsyncTask< String, String, String > {

String user;
protected void onPreExecute() {
//para el progress dialog
pDialog = new ProgressDialog(HiScreen.this);
pDialog.setMessage("Consultando Rutinas...");
pDialog.setIndeterminate(false);
pDialog.setCancelable(false);
pDialog.show();
}

protected String doInBackground(String[]params) {
//obtnemos usr y pass
user=params[0];


comprueba(user);

return user;

//enviamos y recibimos y analizamos los datos en segundo plano.


}

protected void onPostExecute(String user) {

pDialog.dismiss();//ocultamos progess dialog.
Log.e("Mostradas las rutinas del usuario:",""+user);



}

}

}




public class Httppostaux{

InputStream is = null;
String result = "";

public JSONArray getserverdata(ArrayList<NameValuePair> parameters, String urlwebserver ){

//conecta via http y envia un post.
httppostconnect(parameters,urlwebserver);

if (is!=null){//si obtuvo una respuesta

getpostresponse();

return getjsonarray();

}else{

return null;

}

}


//peticion HTTP
private void httppostconnect(ArrayList<NameValuePair> parametros, String urlwebserver){

//
try{
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost(urlwebserver);
httppost.setEntity(new UrlEncodedFormEntity(parametros));
//ejecuto peticion enviando datos por POST
HttpResponse response = httpclient.execute(httppost);
HttpEntity entity = response.getEntity();
is = entity.getContent();

}catch(Exception e){
Log.e("log_tag", "Error in http connection "+e.toString());
}

}

public void getpostresponse(){

//Convierte respuesta a String
try{
BufferedReader reader = new BufferedReader(new InputStreamReader(is,"iso-8859-1"),8);
StringBuilder sb = new StringBuilder();
String line = null;
while ((line = reader.readLine()) != null) {
sb.append(line + "\n");
}
is.close();

result=sb.toString();
Log.e("getpostresponse"," result= "+sb.toString());
}catch(Exception e){
Log.e("log_tag", "Error converting result "+e.toString());
}
}

public JSONArray getjsonarray(){
//parse json data
try{
JSONArray jArray = new JSONArray(result);

return jArray;
}
catch(JSONException e){
Log.e("log_tag", "Error parsing data "+e.toString());
return null;
}

}


}


Esas son las tres clases. Alguien puede ayudarme? estoy muy estancado!!!! Gracias!!

Celtium
17/05/13, 19:20:30
Pasale el depurador, paso a paso... es que sino va ser complicado pillar el error.

Ese error suele darlo cuando se intenta guardar un dato de tistinto tipo en el una variable o se le asigna una acción con un valor null o sin "inflar" la variable. Pon el depurador paso a paso y mira donde rompe. Dimos en que linea rompe y a ver si lo pillamos.

johmq
19/05/13, 11:15:50
Rompe cuando en la segunda activity, HiScreen va a hacer la segunda consulta. No entiendo el porque, si lo hago por separado en dos proyectos se ejecutan perfectamente, ahora si los pongo juntos, es decir primero el login y despues la consulta de las rutinas me da el fallo en la consulta. Rompe concretamente cuando va a hacer la segunda consulta, ya que la segunda activity se muestra, pero cuando pulso el boton para hacer la consulta falla! y hace la conlta de la misma forma que el login , y me tiene amargadisimo!!!

Gracias!!!!!

russellhoff
19/05/13, 11:18:35
Rompe cuando en la segunda activity, HiScreen va a hacer la segunda consulta. No entiendo el porque, si lo hago por separado en dos proyectos se ejecutan perfectamente, ahora si los pongo juntos, es decir primero el login y despues la consulta de las rutinas me da el fallo en la consulta. Rompe concretamente cuando va a hacer la segunda consulta, ya que la segunda activity se muestra, pero cuando pulso el boton para hacer la consulta falla! y hace la conlta de la misma forma que el login , y me tiene amargadisimo!!!

Gracias!!!!!

No he mirado mucho tu código, pero profesionalmente me parece una chapuza :p. Para empezar, deberías parsear los JSON en una clase diferente. Por otra parte, cada consulta a la base de datos debería de estar dentro de un hilo, esto es, dentro de una AsyncTask (sino va a cascar justo en el instante).

Espero haberte ayudado.

russellhoff
19/05/13, 11:21:00
Por cierto, nos estamos yendo un poco offtopic.

La solución a mi hilo es el siguiente: recomiendo crear un WebService para atacar cualquier base de datos, ahí encontré mi solución.

La propuesta particular mía es usar Java con la librería Jersey para servicios web (JAX-SX creo), usando particularidades de google como GSON (gozada).

Un saludo.

johmq
19/05/13, 12:47:50
No he mirado mucho tu código, pero profesionalmente me parece una chapuza :p. Para empezar, deberías parsear los JSON en una clase diferente. Por otra parte, cada consulta a la base de datos debería de estar dentro de un hilo, esto es, dentro de una AsyncTask (sino va a cascar justo en el instante).

Espero haberte ayudado.

Bueno es la primera vez que programo en android... tendre tiempo para mejorar profesionalmente:P. Las consultas a la base de datos estan ya en una asynctask!
(desde asyntask llamo a la funcion loginstatus(en login) y comprueba ( en HiScreen) ahi es donde se realiza la consulta, )

Si sabeis una posible solucion me ayudariais mucho!! Gracias!!

russellhoff
19/05/13, 12:52:04
uff te ayudaría pero ahora estoy estudiando. Por cierto, yo llevo en Android desde enero, pero es tema de saber programar o no, en el sentido amplio

johmq
19/05/13, 12:59:31
uff te ayudaría pero ahora estoy estudiando. Por cierto, yo llevo en Android desde enero, pero es tema de saber programar o no, en el sentido amplio


Pues cuando puedas te agradeceria que me echaras una mano!!! de momento estoy intentando ver cual es el problema con el debuguer, a ver si consigo dar con el.

Gracias!

johmq
19/05/13, 13:40:42
Nada no hay manera. Si me funcionan las dos partes como proyectos independientes, porque falla cuando las pongo una tras otra? Arggggggggg me tiene un tanto amargado.

johmq
21/05/13, 09:29:24
A mi lo que me gustaria saber es porque la segunda consulta a base de datos mysql de mis proyectos android SIEMPRE dan error. Ahi es donde esta el problema. He probado con asyntask, sin asyntask, y con hlos. Si hago las consultas en dos proyectos independientes lo hace perfectamente, si las pongo una tras otra, no. :(

russellhoff
21/05/13, 10:22:07
Lo que sí tienes que hacer es con AsyncTask. AsyncTask es una clase que te crea un hilo independiente para la ejecución de una serie de sentencias. Es recomendable que uses esta clase para hacer uso de hilos, aunque también puedes gestionarlos por tu cuenta.

johmq
21/05/13, 10:57:13
Lo que sí tienes que hacer es con AsyncTask. AsyncTask es una clase que te crea un hilo independiente para la ejecución de una serie de sentencias. Es recomendable que uses esta clase para hacer uso de hilos, aunque también puedes gestionarlos por tu cuenta.


Si te fijas en el codigo, utilizo esa clase para ejecutar las consultas.

russellhoff
21/05/13, 11:01:15
Ya sé donde tienes el fallo.

No puedes cambiar de Activity cuando estás dentro de un AsyncTask. Tienes que hacerlo fuera, tras terminar la ejecución dle hilo y, por supuesto, tras el execute().

Me imagino que será por eso eh.

russellhoff
21/05/13, 11:02:39
De hecho, cuando abres un nuevo hilo se hace algo así como un cambio de contexto, por lo que en el hilo no se sabe de la existencia de algo de donde ha sido llamado/ejecutado, y por lo tanto, no sabe que estabas en una Activity antes de ejecutarlo.

johmq
21/05/13, 11:46:53
Ya sé donde tienes el fallo.

No puedes cambiar de Activity cuando estás dentro de un AsyncTask. Tienes que hacerlo fuera, tras terminar la ejecución dle hilo y, por supuesto, tras el execute().

Me imagino que será por eso eh.


No es por eso, ademas, en el postexecute ya estas en el hilo principal, unicamente pasas al secundario en el doinbackground.

Ya se cual era el fallo, no podia ejecutar dos peticiones con las mismas variables de httpclient , httppost y todas las que estan dentro de la clase httppostaux, ahi era donde se producia el fallo y por lo tanto nunca me dejaba ejecutar la segunda consulta. He creado otra clase con la misma configuracion que esta y cambiandole los nombre a las variables y ya me funciona :D

Muchas gracias por la ayuda!!!

scalleti
26/02/15, 23:47:26
Podrías mostrarme el código para solucionar este problema, yo tengo el mismo y no paso de ahi