entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

2votos

Problemas al enviar datos a MySQL desde Android

Buenas, estoy intentando insertar unos datos en una base externa de MySQL, como no los ingresaba, he realizada un seguimiento por log.e de los pasos, el mensaje recibido es el de "IP no válida", cuando intenta hacer la conexión con HttpClient, además me muestra un error de "NetworkOnMainThreadException", no se si he conseguido explicarme bien, os muestro el código:

public class AgregarPalabra extends Activity {
String palabraIngles;
String palabraSpain;
InputStream is=null;
String result=null;
String line=null;
int code;
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.agregar);
    final EditText ingles=(EditText) findViewById(R.id.inputIngles);
    final EditText spain=(EditText) findViewById(R.id.inputSpain);
    Button agregar=(Button) findViewById(R.id.btnAgregar);
    agregar.setOnClickListener(new View.OnClickListener() { 
    @Override
    public void onClick(View v) {
        palabraIngles = ingles.getText().toString();
        palabraSpain = spain.getText().toString();
        insert();
    }
});
}
public void insert() {
      ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
   nameValuePairs.add(new BasicNameValuePair("ingles",palabraIngles));
   nameValuePairs.add(new BasicNameValuePair("spain",palabraSpain));
   String url = "http://localhost/agregar.php";
    try {
     HttpClient httpclient = new DefaultHttpClient();
        HttpPost httppost = new HttpPost(url);
        httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
        HttpResponse response = httpclient.execute(httppost); 
        HttpEntity entity = response.getEntity();
        is = entity.getContent();
        Log.e("pass 1", "connection success ");
} catch(Exception e) {
        Log.e("Fail 1", e.toString());
        Log.e("INFO", palabraIngles);
        Log.e("INFO", palabraSpain);
        Toast.makeText(getApplicationContext(), "Invalid IP Address",
    Toast.LENGTH_LONG).show();
} try {
        BufferedReader reader = new BufferedReader (new InputStreamReader(is,"iso-8859-1"),8);
        StringBuilder sb = new StringBuilder();
        while ((line = reader.readLine()) != null)
    {
            sb.append(line + "\n");
        }
        is.close();
        result = sb.toString();
    Log.e("pass 2", "connection success ");
}
    catch(Exception e)
{
        Log.e("Fail 2", e.toString());
} try {
        JSONObject json_data = new JSONObject(result);
        code=(json_data.getInt("code"));

        if(code==1)
        {
    Toast.makeText(getBaseContext(), "Inserted Successfully",
        Toast.LENGTH_SHORT).show();
        } else {
     Toast.makeText(getBaseContext(), "Sorry, Try Again",
        Toast.LENGTH_LONG).show();
        }
}
catch(Exception e)
{
        Log.e("Fail 3", e.toString());
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}}

2 Respuestas

2votos

Leonardo-Tadei Puntos227020

Hola Caino,

tu problema está en que te estas queriendo conectar a http://localhost/agregar.php.

En redes TCP/IP, localhost es siempre el nombre del propio equipo, es decir, en este caso del Android (real o simulado) en el que estás probando el codigo.

Supongo que la aplicacion PHP a la que apuntás esta en tu PC. En este caso, tenes que poner ahi la IP externa de tu red local que podes consultar con los comandos /sbin/ifconfig (en GNU/Linux) o ipconfig (en MS Windows).

Esta IP es probable que sea una privada de tu red local. Si es asi, no funcionará fuera de tu casa/trabajo. Para conectarte desde cualquier parte tenes que apuntar a una IP publica o al nombre DNS de un dominio.

Saludos!

0voto

canio comentado

Muchas gracias por tu respuesta!, no había caído en ese error, tendría que haber puesto la IP de la red local, de todas formas, las pruebas también la hice en un servidor externo, y el resultado era el mismo. Por lo que he podido leer parece ser que tengo que hacer uso de "asynctask", pero cuando llegue a mi casa probaré lo que dices.

0voto

Peter comentado

@canio moví tu respuesta a comentario. Las respuestas son para las preguntas en si.

Saludos.

0voto

Leonardo-Tadei comentado

Hola Canio,

el error " IP no valida" es por el acceso incorrecto al servidor.

Poner esto en un asynctask te permite que la tarea corra en background, ya que de otra forma la interfaz se quedará congelada mientras dura la peticion, pero es un problema aparte del de la IP.

Podrias poner un " hola mundo" en PHP y apuntar el navegador de Android para ver si se puede acceder a esa pagina... te sacaria la duda de si la conexion se establece o no de forma independiente a tu codigo.

Ya nos contarás!

0voto

Nara comentado

Fijate lo del IP que dice Leonardo pero ademas hace lo del Asynctask android te exige que toda peticion a servidor sea realizada en otro hilo distinto para evitar que se congele la pantalla. Yo estuve luchando mucho tiempo hasta lei eso en el manual de android.

0voto

Nara comentado

Proba (Android Asynchronous Http Client) este plugin para android que es espectacular. Fácil de usar y te ayuda muchísimo para todo lo que son peticiones http-post/get o con archivos.

1voto

canio Puntos900

Gracias a todos por las respuesta!!! estuve investigando sin leer todos los mensajes y cuando llegué a casa probé una cosa y al final resultó que funcionaba, aunque no es la mejor solución, pues ignora el error y fuerza a la aplicación a seguir corriendo. El código usado ha sido este:

StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder()
.permitAll().build();
StrictMode.setThreadPolicy(policy);

En los próximos días probaré algunas de vuestras sugerencias, pero doy el hilo por solucionado, gracias!

Por favor, accede o regístrate para responder a esta pregunta.

Otras Preguntas y Respuestas


...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta