Bien, el tema en sí es complejo, ojo, no difícil de entender, si no complejo de realizar, vamos a realizar mucho código para lo que realmente necesitamos, interactuar con una base de datos mysql en un servidor.
Si habéis hecho conexiones a mysql desde java sabréis que con una clase que contenga 4 o 5 lineas de código podíamos realizar nuestra conexión a mysql, podéis comprobarlo aquí, posteriormente solo teníamos que manejar los datos obtenidos (7 u 8 lineas) y ya podíamos mostrar resultados en nuestro programa. Bien, esto en android cambia y se vuelve más complejo ya que, por seguridad, deberemos crear un webservice para que nos sirva de puente entre nuestra aplicación y nuestro servidor.
Un Webservice suele ser un archivo PHP que recibe peticiones de nuestra app y se las envía al servidor, posteriormente el servidor responde a nuestro webservice, y este, a su vez, responde a nuestra app. Os dejo una imagen para que lo entendáis mejor.
Bien, para crear la conexión a mysql necesitaremos:
- Servidor con base de datos Mysql.
- Mi base de datos esta compuesta por una tabla "personas" con los siguientes campos:
- DNI---Varchar
- Nombre--Varchar
- Teléfono--Varchar
- Email.--Varchar
- Uno o varios WebService (según necesitemos). Yo voy a utilizar 2:
- Insert.php
- selectAll.php
- Una conexión mediante la clase HttpClient de la API de Apache
- No hay que agregar librerías, esta API va incluida en el repositorio android.
- Ejecutarlo todo mediante hilos AsyncTask.
- A partir de la versión 3 o superior, correrlo todo en AsyncTask es obligatorio.
Bueno, sabiendo esto, creamos un nuevo proyecto con su respectiva activity.
Mi activity va a ser muy simple:
- 4 TextView y 4 Edittext, para los campos a rellenar.
- 2 Button para insertar y mostrar.
- 2 ImageButton para pasar de una persona a otra y se nos vaya mostrando.
Bien, una vez tengamos nuestro diseño, nos vamos a nuestra clase.
Lo primero es ligar nuestra clase con el archivo xml y sus componentes:
Antes de continuar vamos a ir a nuestro archivo AndroidManifest y vamos a agregar permisos de INTERNET, muy importante.
Una vez hecho todo lo anterior vamos a crear un método que envíe la información que introducimos en los campos a nuestro WebService para que este se lo comunique al servidor y obtener una respuesta.
Bueno, no os asustéis de ver tanta linea, ante todo saber que solo trabajamos con 2 clases y un ArrayList:
- HttpClient: Clase encargada de enviar la información almacenada en httpPost a nuestro WebService.
- HttpPost: almacena los datos que serán enviados, por medio de HttpClient, a nuestro WebService.
- List: Almacena objetos de tipo "NameValuePair" el cual almacena por constructor (NameValuePair es una interfaz la cual implementa la clase BasicNameValuePair ) una variable y el valor que contendrá dicha variable, las cuales son las que obtendrá nuestro WebService.
Veamos:
- Implementamos las clases con las que vamos a trabajar:
- HttpClient httpclient=new DefaultHttpClient();
- HttpPost httppost=new HttpPost("URL DE NUESTRO WEBSERVICE EN EL SERVIDOR")
- Yo tengo puesto la ip local de mi pc, ya que si ponemos localhost o 127.0.0.1, el dispositivo va a buscar su propio localhost, el que va incluido en el móvil, y puede crear errores, lo mejor si estas probando, la ip local de tu pc. Si utilizas el emulador que trae el eclipse SDK android, tendrás que poner 10.0.0.2, ya que si no te dará fallo.
- List
nameValuePairs=new ArrayList (4); - En este caso le damos a nuestro ArrayList un tamaño (4) ya que son el número de variables con las que vamos a tratar, si quieres utilizar 3, pones 3, y así sucesivamente.
- Ya tenemos nuestras clases preparadas, ahora vamos a almacenar los datos de nuestros EditText en nuestro ArrayList:
- nameValuePairs.add(BasicNameValuePair("dni", dni.getText().toString().trim()));
- Bien, esto no tiene mucha historia, almacenamos objetos de BasicNameValuePair con una variable y el valor que va a tener que le pasamos por constructor. Agregamos a nuestro ArrayList un objeto de este tipo según el tamaño que le hayamos dado.
- Una vez almacenados los datos, le pasamos el ArrayList a nuestra clase HttpPost para que lo codifique:
- httppost.setEntity(new UrlEncodeForEntity(nameValuePairs));
- Bueno, una vez que lo tenemos codificado con la url del webservice y la información de nuestro ArrayList, hacemos que HttpClient lo envíe:
- httpclient.execute(httppost);
Bueno, no era tan difícil, si un poco complejo, pero no difícil.
Bien, ya hemos enviado nuestra información a nuestro WebService, veamoslo con lo que le hemos enviado:
Veamos, este es nuestro WebService, un archivo escrito en PHP que interactua con nuestro servidor, su funcionamiento sería de la siguiente manera:
- Rellenamos las variables del localhost con la información de nuestro servidor:
- Hostname: Nombre del host.
- Database: Nombre de nuestra base de datos.
- Username: Nombre de usuario del servidor.
- Password: Contraseña del servidor.
- Posteriormente, con los datos de servidor que hemos introducido, le pedimos que conecte al servidor y almacene la respuesta en otra variable:
- $localhost = mysql_connect($hostname_localhost,$username_localhost,$password_localhost)
- Si no puede conectar enviara un informe de error
- or trigger_error(mysql_error(),E_USER_ERROR);
- Una vez conectado al servidor, buscará nuestra base de datos y se conectará:
- mysql_select_db($database_localhost, $localhost);
- Posteriormente, y una vez encontrad la base de datos, obtendrá las variables que le pasamos por nuestra aplicación y las almacenará en otras variables que pueda manejar mejor.
- $nombre=$_POST['nombre'];
- $dni=$_POST['dni'];
- $telefono=$_POST['telefono'];
- $email=$_POST['email'];
- Daos cuenta de que los nombres entre comillas simples se llaman igual a las variables que les pasamos por nuestra app.
- Almacenadas las variables, introduce los valores en un sentencia sql para realizar una consulta al servidor:
- $query_search = "insert into personas(nombre,dni,telefono,email) values ('".$nombre."','".$dni."','".$telefono."','".$email."')";
- Cuidado con las comillas simples y dobles, que puede ser un follón jeje.
- Finalmente, y si todo ha ido bien, realizará la consulta a nuestro servidor, el cual, en caso de fallar la sentencia, nos enviará un informe de error.
- $query_exec = mysql_query($query_search) or die(mysql_error());
- Cerramos la conexión.
- mysql_close($localhost);
Bien, ya tenemos el código java para conectarnos a nuestro servidor por medio de android y tenemos un webservice escrito en PHP que hace de puente entre nuestra app y el servidor, pero aún nos queda un último paso, realizar la consulta por medio de una clase AsyncTask.
NOTA:No voy a hacer aquí una explicación sobre el funcionamiento de una clase AsyncTask, ya que me quedaría muy extenso el post, en el futuro crearé un tema para esta clase. En google puedes encontrar mucha información sobre esta clase.
Nos volvemos a nuestra clase, y creamos una clase interna que herede de AsyncTask:
Bien, en el método doInBackground creamos una condición if, en el cual introducimos como condición el método insertar() (por esa razón lo hice booleano) si se los datos han sido insertados, el método nos devuelve true y nos muestra un Toast con el éxito de la operación y limpiando nuestro formulario, todo esto debe correr en un hilo ya que si no bloquearía nuestro AsyncTask y nos funde a errores, si los datos no han podido ser insertados, el método insertar nos devolverá false, y nos mostrará un Toast corriendo en un hilo.
Bueno, ya lo tenemos todo:
- Un servidor. Bien!
- Un WebService. Bien!
- Un método para conectar con nuestro WebService. Bien!
- Una clase AsyncTsk que ejecuta nuestro código. Bien!
Solo nos falta ir al botón insertar y darle una acción, para cuando se pulse ejecute todo al mismo tiempo.
Finalmente ya lo tenemos, cuando pulsemos nuestro botón comprobará que no haya ningún campo vacío, si lo hay, enviará un mensaje y no insertará nada.
Bueno, mencionar que mi dispositivo android no me hace bien las capturas de fotos y nos puedo mostrar una captura con datos, pero si os puedo mostrar como los muestra mi tabla personas una vez insertado los datos.
También os dejo la clase, el archivo .xml y el webservice en este enlace:
https://www.mediafire.com/?qyrmwvks9cyl2rx
PD: No he mencionado nada de encriptación (MD5, Base64...) o los certificados SSL, quiero hacer una entrada acerca de la seguridad.
PD: No he mencionado nada de encriptación (MD5, Base64...) o los certificados SSL, quiero hacer una entrada acerca de la seguridad.
Continuaremos la lección en la PARTE 2.
Un saludo.
Haz por favor el de botón mostrar amigo por favor te lo agradeceria
ResponderEliminarBuenas Andrés.
EliminarEl botón "mostrar" esta hecho:
http://picarcodigo.blogspot.com.es/2014/05/webservice-conexion-base-de-datos-mysql.html
También te pueden interesar el botón "Update"y el botón "Borrar", los puedes encontrar aquí
http://picarcodigo.blogspot.com.es/p/tutoriales-avanzados-android.html
Por ahora no voy a hacer ningún tema nuevo hasta que termine el proyecto que estoy haciendo. Lo siento, pero me ocupa demasiado tiempo.
Un saludo, avísame si necesitas algo más.
Muchas gracias Bartolomé tienes tutoriales muy didácticos que nos ayudan a los que nos iniciamos en este mundo del desarrollo para android
EliminarEstimado, no pasa al error en caso de no insertar
Eliminarcierto como hacemos para que aparesca el error??
EliminarHola yo tengo un problema es el siguiente:
Eliminarjava.net.sockettimeoutexception failed to connect to http://10.0.3.2/ (port 80)
estoy ocupando XAMP phpMyadmin, la URL donde se mandan los datos todo esta bien pero no me pasa de esa parte, me podrías ayudar
@Bartolomé Abellán Sera que lo puedas hacer en Spring los Rest, mysql y android? necesito ayuda :( estoy atorado
EliminarMuy buen tuto, Gracias!!!
ResponderEliminarcomo le haria para descargar imagenes , y actualizarlas dese un web service
ResponderEliminarestoy haciendo un tipo catalago y me gustaria q se coencte a un web y este le mande las imagenes de los articulos en existencia, y queden guardados en el cel , asi como tambien los elimine si el articulo no esta disponible
te funciono ? -- me pasa lo mismo compadre, me dice insertado pero en la BD no me aparece nada Saludos
Eliminarhola, el tuto excelente, al fin alguien explica como la gente, Gracias
ResponderEliminarahora... hice todo pero no me funciona! Cuando le doy guardar desde la app del cel me dice como que la operacion fue exitosa pero en la bd no me aparece nada, que puede ser?
Si intento acceder al insertar.php desde mi cel a travez de la ip de mi maquina directamente desde el brouser no me deja, me da acceso restringido, quiza esto tenga algo que ver, saludos
Hola, muy bueno el post! mi pregunta es: no hay manera de hacerlo con un JDBC o algo por estilo sin la necesidad de enviar los datos mediante POST a través de un script PHP?
ResponderEliminarSi lo haces a través de JDBC puedes tener problemas de seguridad. Mira este post.
Eliminarhttp://stackoverflow.com/questions/12233145/connecting-to-mysql-from-android-with-jdbc
Buenas a todos, estoy trabajando como un chino estas vacaciones y no os puedo dedicar tiempo.
EliminarLa cosa es que Canals tiene toda la razón, vas a tener muchos problemas de seguridad, y creo, solo creo, que a partir de la versión 3 no es posible hacer conexiones JDBC entre Android y Mysql, esto es debido a que oracle es poseedora de Mysql y no quiere dar soporte a Android porque esta enfrascada en juicios con Google por el tema de que Android utilice librerías Java y Oracle no ve un duro, por esta razón Mysql y Android no se llevan bien y tenemos que utilizar WebServices para realizar nuestras conexiones.
Entre esta disputa de Oracle y Google y que una conexión directa via JDBC puede hacer que tu seguridad este comprometida (NO olvidemos que android funciona por wifi o red de datos, por lo tanto nuestros datos están siempre en el aire siendo transportados por ondas y cualquiera con pocos conocimientos en la materia te podría sacar contraseñas), lo mejor y más seguro para conectar Android y Mysql es utilizar WebServices como explico en este tema.
PD: También deberías utilizar cifrados de datos (MD5 Base64....) y certificados SLL para hacer aún más seguras tus conexiones, pero aún no he hecho un tema sobre ese asunto, así que si quieres más info busca en San Google, cuando tenga tiempo haré un post de Android y su seguridad.
Un saludo.
Excelente explicación Gracias por el aporte
ResponderEliminarhola muy buen aporte, una ayuda, al ejecutar con la ip local de mi pc me funciona, pero si cambio de red wifi a otra la ip se cambia automatico de la pc y tengo que cambiar la ip en la aplicacion android, probé que me funcione instalando el apk a un celular y no me devuelve nada, quisiera saber como haria para que mi aplicacion android se conecte al servidor con cualquier conexion wifi??
ResponderEliminarTe lo agradecería mucho, es para mi proyecto
Buenas, si tienes montado un servidor con localhost solo te va a funcionar mientras estés conectado a la misma red que el servidor.
EliminarPara conectarte con cualquier dispositivo, debes hacer público tu servidor, con tu propio dominio o con alguno gratuito que te permita instalar mysql y php (no todos te dejan), una vez hecho publico, deberías de poner la url del servidor publico a tu app android y ya podrías acceder a él desde cualquier dispositivo y/o red.
Un saludo.
Gracias por tu aporte, me ayuda muchísimo, pero tengo una duda:
ResponderEliminarEn un hosting real, el archivo php debe estar dentro de public_html? o se puede crear una carpeta dentro del File Manager y ponerlo ahi?
Saludos.
Eduardo.
Me uno a la pregunta.
Eliminarel de arriba usas hostinguer verda yo tambn qro conectarm desde mi cel en un servidor en internet
ResponderEliminarmuy buena la información gracias, ahora tengo un problema con el emulador manda la información a la base de datos pero ya usando la aplicación en el celular dice que subió con éxito los datos sin embargo en la base de datos no aparece nada, como puedo solucionarlo? y como podría mandar la información con un spinner a la base de datos?
ResponderEliminarMuy bueno el tutorial Bartolomé.
ResponderEliminarEstoy atrancado en el proceso de dirigir con una dirección IP el scrip php. Estoy usando el emulador de eclipse y pongo la dirección que pusiste (10.0.0.2)
Tengo que crear un servidor local con, por ejemplo WAMP??
No es posible incrustar el php dentro del proyecto de android sin necesidad de direccionarlo?
Muchas gracias de antemano
Muy bueno el tutorial Bartolomé.
ResponderEliminarEstoy atrancado en el proceso de dirigir con una dirección IP el scrip php. Estoy usando el emulador de eclipse y pongo la dirección que pusiste (10.0.0.2)
Tengo que crear un servidor local con, por ejemplo WAMP??
No es posible incrustar el php dentro del proyecto de android sin necesidad de direccionarlo?
Muchas gracias de antemano
Buenas Antonio;
EliminarLa cosa es que la dirección del emulador no es 10.0.0.2, es 10.0.2.2....sorry por mi parte :P
El php va al servidor, siempre, porque es en el servidor donde esta la BD.
No se que proyecto estas realizando, pero, quizas, te venga mejor utilizar una base de datos incrustada en tu app (SQLite es la base de datos que utiliza android)
Pero si lo que quieres es tener una base de datos que intercambie datos entre distintos usuarios, si, necesitas un servidor wamp (funciona solo en windows), Lamp(funciona solo en linux) o xamp(funciona en ambos y es el que yo utilizo) e incrustar ahí tus php.
Un saludo.
ola amigo oye tengo una pregunta ya hice todo lo que documentaste pero ahora, lo corro en mi celular y el botón no realiza nada ninguna acción, intente agregar ala barra de propiedades en el onclick , buscando el método pero no lo encuentra me gustaría que me dijeras si agregaste algo en la propiedad del onclick del botón para que realice la acción. Gracias
Eliminarmuchas gracias por la informacion muy bien preparado Bartolome abellan un saludo desde bolivia
ResponderEliminarEste comentario ha sido eliminado por el autor.
ResponderEliminargracias por el aporte. si quisiese enviar de una sola ves varios objetos Persona para almacenarlos? para enviar 2, 3 o la cantidad que se requiera. hay algun tutorial que trate del tema? Gracias
ResponderEliminarHola muy bueno tu aporte de casualida no tienes un ejemplo de como conectar un webservices en visual studio a una base de datos en mysql y que el web services sea consumido por una aplicacion de escritorio todo programado en c# porfa se te agradece y saludos
ResponderEliminarHola, mi pregunta es si tienes algún tutorial para alguien con menos experiencia en cuestión de la creación de webservice loca, que complementos y programas, configuraciones ect. te lo agradecería mucho..
ResponderEliminarEsta muy bien explicado tu Tutorial, me funciono a la primera con mi propia base de datos :D
ResponderEliminarGracias por compartir el conocimiento... Saludos desde Bolivia
Se puede enviar una imagen?
ResponderEliminarola amigo te quedo esa aplicación como agregaste la acción al botón por que ami no me hace nada el botón.
EliminarHola, yo hice una pagina web (mapa) y esta tiene marcadores que funcionan mediante una BD. Quisiera saber como usar un Toast mediante un webview... Es decir, al momento de entrar a mi pag mediante el webview y de clic en un marcador, los datos del marcador se muestren en un toast... Help me please!
ResponderEliminarSe me olvido mencionar, que el webview lo hice de forma local... Espero que me puedas ayudar =)
EliminarA mi no me hace nada al pulsar insertar. Sabéis que puede ser?
ResponderEliminarExcelente tutorial hermano!
ResponderEliminarDisculpa el boton mostrar no funciona no los imagenbutton e inserta pero los datos que manda son "Array" podrias ayudarme
ResponderEliminarHola una pregubtota como y con que hiciste el servidor muchas gracias de antemano
ResponderEliminarhola una consulta porfavor, vajo este metodo de conexion a webservice como se hace para verificar la existencia de una persona???
ResponderEliminarMe sale el mensaje confirmando que insertó los datos correctamente pero al revisar la base de datos no hay nada, mi pregunta es: que archivo debo revisar? el insertar.php o que linea de comando de la aplicación? o algún otro lado?
ResponderEliminarPlease!!!
PD: muy bueno el tutorial :)
Buenas , antes que nada muchas gracias por el tutorial, me sirvio mucho, pero tengo un incoveniente.
ResponderEliminarYa probé el programa y funciona muy bien en mi casa donde tengo una ip dinamica, no tengo ningun proxy ni nada por el estilo.
Pero en mi trabajo donde se maneja la red donde cada dispositivo tiene una ip estatica y hay un servidor proxy no funciona, no me llegan los datos, que se tendría que configurar para que puedan llegar?
Si en mi navegador pongo una vez conectado a la red de mi trabajo , la direccion local host y donde se encuetra mi base de datos, si funciona el php ya que me solicita que mande, nombre, dni, telefono, etc. y me introduce en la tabla una fila en blanco, pero entonces me imagino que se tiene que poner algo en el codigo, o que pudiera ser?
Agrega estalinea En Grandle.properties:
EliminarsystemProp.http.nonProxyHosts=*.local;192.168.*.*;localhost
y en tu celular configura el proxyy en omitir proxi para colocas tu IP
muy bueno el post, bueno soy nuevo en esto y la verdad es que hay parte del codigo que me lo tacha como puedo solucionarlo ???
ResponderEliminarEste comentario ha sido eliminado por el autor.
Eliminarpor que no funciona con un servidor proxy
ResponderEliminarexcelente post. gracias saque adelante mi proyecto. un GPS que envia latitud y longitud a un servidor conectado a a una ip publica. gracias oscar j
ResponderEliminarHola
ResponderEliminartengo un problema y el log de Android me arroja lo siguiente... podrías darme una mano por favor? gracias.
11092/matias.modulos.webservice E/AndroidRuntime﹕ FATAL EXCEPTION: AsyncTask #1
Process: matias.modulos.webservice, PID: 11075
java.lang.RuntimeException: An error occurred while executing doInBackground()
at android.os.AsyncTask$3.done(AsyncTask.java:309)
at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:354)
at java.util.concurrent.FutureTask.setException(FutureTask.java:223)
at java.util.concurrent.FutureTask.run(FutureTask.java:242)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:234)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
at java.lang.Thread.run(Thread.java:818)
y sigue...
Buenas Matias, necesito el "y sigue", lo que me has pegado me indica lo que ha ocurrido, pero no por que ha ocurrido.
EliminarUn saludo
Este comentario ha sido eliminado por el autor.
EliminarEste comentario ha sido eliminado por el autor.
EliminarEstimado Bartolomé, informo que en parte está resuelto el inconveniente. El tema era que no tenía configurado correctamente el manifiest, estaba colocando mal la versión del SDK
EliminarAhora sale el cartel avisando que se introducieron los datos correctamente, pero no se ven reflejados en la BBDD...
Saludos
Buenas Matias;
EliminarComprueba que tienes permiso de lectura y escritura en tus carpetas del servidor. Es posible que el problema este ahi, con lo que te sale el mensaje de insertado con exito, pero no te inserta nada en la tabla.
PD: tienes que mirar los permisos donde tengas puesto tu php, de todas maneras, revisa que las carpetas en la que marcas tu ruta donde esta tu php,, tambien posee permisos. Algunas veces me ha resultado que la carpeta donde tengo mi php si tiene permisos, pero la carpeta donde esta introducida tu carpeta con php no los tiene, es decir, si tu tienes la ruta "carpeta1/carpetaphp/tuphp.php", comprueba los permisos de "carpeta1 y carpetaphp"
Un saludo. Suerte.
Este comentario ha sido eliminado por el autor.
EliminarEstimado, gracias por tu respuesta.
EliminarLos permisos que tengo en las carpetas de mi servidor son 755, y también los archivos php.
En este momento el único error que me arroja el log es el siguiente,
10-07 14:48:58.825 7760-7774/matias.modulos.webservice E/Surface﹕ getSlotFromBufferLocked: unknown buffer: 0xab6d4920
estuve investigando pero no pude dar con la solución, espero puedas darme una última ayuda! gracias por tu tiempo
me marca error en el if(insertar())
ResponderEliminarEste comentario ha sido eliminado por el autor.
EliminarEste comentario ha sido eliminado por el autor.
ResponderEliminarHola que tal primeramente un gran gran aporte , quisiera ver si me podrias ayudar a conectarlo con mi base de mi dominio ya que me manda este error
ResponderEliminar10-08 15:35:34.140 12390-12390/com.webserviceexample D/Atlas﹕ Validating map...
10-08 15:35:34.180 12390-12405/com.webserviceexample D/﹕ HostConnection::get() New Host Connection established 0x7fe4638bc760, tid 12405
10-08 15:35:34.260 12390-12405/com.webserviceexample I/OpenGLRenderer﹕ Initialized EGL, version 1.4
10-08 15:35:34.290 12390-12405/com.webserviceexample W/EGL_emulation﹕ eglSurfaceAttrib not implemented
10-08 15:35:34.290 12390-12405/com.webserviceexample W/OpenGLRenderer﹕ Failed to set EGL_SWAP_BEHAVIOR on surface 0x7fe4638bbe80, error=EGL_SUCCESS
10-08 15:35:36.940 12390-12397/com.webserviceexample W/art﹕ Suspending all threads took: 10ms
10-08 15:35:42.610 12390-12406/com.webserviceexample W/System.err﹕ org.apache.http.conn.HttpHostConnectException: Connection to http://50.62.160.77 refused
10-08 15:35:42.610 12390-12406/com.webserviceexample W/System.err﹕ at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:188)
10-08 15:35:42.610 12390-12406/com.webserviceexample W/System.err﹕ at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:169)
10-08 15:35:42.610 12390-12406/com.webserviceexample W/System.err﹕ at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:124)
10-08 15:35:42.610 12390-12406/com.webserviceexample W/System.err﹕ at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:365)
10-08 15:35:42.610 12390-12406/com.webserviceexample W/System.err﹕ at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:560)
10-08 15:35:42.610 12390-12406/com.webserviceexample W/System.err﹕ at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:492)
10-08 15:35:42.610 12390-12406/com.webserviceexample W/System.err﹕ at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:470)
10-08 15:35:42.610 12390-12406/com.webserviceexample W/System.err﹕ at com.webserviceexample.MainActivity.insertar(MainActivity.java:94)
10-08 15:35:42.610 12390-12406/com.webserviceexample W/System.err﹕ at com.webserviceexample.MainActivity.access$400(MainActivity.java:30)
10-08 15:35:42.610 12390-12406/com.webserviceexample W/System.err﹕ at com.webserviceexample.MainActivity$Insertar.doInBackground(MainActivity.java:119)
10-08 15:35:42.610 12390-12406/com.webserviceexample W/System.err﹕ at com.webserviceexample.MainActivity$Insertar.doInBackground(MainActivity.java:109)
10-08 15:35:42.610 12390-12406/com.webserviceexample W/System.err﹕ at android.os.AsyncTask$2.call(AsyncTask.java:292)
10-08 15:35:42.610 12390-12406/com.webserviceexample W/System.err﹕ at java.util.concurrent.FutureTask.run(FutureTask.java:237)
10-08 15:35:42.610 12390-12406/com.webserviceexample W/System.err﹕ at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
10-08 15:35:42.610 12390-12406/com.webserviceexample W/System.err﹕ at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
10-08 15:35:42.610 12390-12406/com.webserviceexample W/System.err﹕ at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
10-08 15:35:42.610 12390-12406/com.webserviceexample W/System.err﹕ at java.lang.Thread.run(Thread.java:818)
10-08 15:35:42.610 12390-12406/com.webserviceexample W/System.err﹕ Caused by: java.net.ConnectException: socket failed: EACCES (Permission denied)
10-08 15:35:42.610 12390-12406/com.webserviceexample W/System.err﹕ at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:186)
10-08 15:35:42.610 12390-12406/com.webserviceexample W/System.err﹕ ... 16 more
10-08 15:35:42.610 12390-12406/com.webserviceexample W/System.err﹕ Caused by: java.net.SocketException: socket failed: EACCES (Permission denied)
ResponderEliminar10-08 15:35:42.610 12390-12406/com.webserviceexample W/System.err﹕ at libcore.io.IoBridge.socket(IoBridge.java:623)
10-08 15:35:42.610 12390-12406/com.webserviceexample W/System.err﹕ at java.net.PlainSocketImpl.create(PlainSocketImpl.java:198)
10-08 15:35:42.610 12390-12406/com.webserviceexample W/System.err﹕ at java.net.Socket.checkOpenAndCreate(Socket.java:687)
10-08 15:35:42.610 12390-12406/com.webserviceexample W/System.err﹕ at java.net.Socket.connect(Socket.java:847)
10-08 15:35:42.610 12390-12406/com.webserviceexample W/System.err﹕ at org.apache.http.conn.scheme.PlainSocketFactory.connectSocket(PlainSocketFactory.java:124)
10-08 15:35:42.610 12390-12406/com.webserviceexample W/System.err﹕ at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:149)
10-08 15:35:42.610 12390-12406/com.webserviceexample W/System.err﹕ ... 16 more
10-08 15:35:42.610 12390-12406/com.webserviceexample W/System.err﹕ Caused by: android.system.ErrnoException: socket failed: EACCES (Permission denied)
10-08 15:35:42.610 12390-12406/com.webserviceexample W/System.err﹕ at libcore.io.Posix.socket(Native Method)
10-08 15:35:42.610 12390-12406/com.webserviceexample W/System.err﹕ at libcore.io.BlockGuardOs.socket(BlockGuardOs.java:282)
10-08 15:35:42.610 12390-12406/com.webserviceexample W/System.err﹕ at libcore.io.IoBridge.socket(IoBridge.java:608)
10-08 15:35:42.610 12390-12406/com.webserviceexample W/System.err﹕ ... 21 more
10-08 15:35:42.680 12390-12405/com.webserviceexample W/EGL_emulation﹕ eglSurfaceAttrib not implemented
10-08 15:35:42.680 12390-12405/com.webserviceexample W/OpenGLRenderer﹕ Failed to set EGL_SWAP_BEHAVIOR on surface 0x7fe46390dd40, error=EGL_SUCCESS
revise en mi dominio y si tiene permisos de lectura y escritura la carpeta ademas de que use netbeans para editar el php y funciona bien, también por dafaul es obligatorio poner contraseña al acceso, espero me puedan aydar, muchas gracias
ResponderEliminarExcelente tutorial!!!!! Muchas Gracias eres un crack Saludos
ResponderEliminarHola, como debo poner el la direccion ("ADRESS") del local host si yo hago las pruebas en mi telefono android?
ResponderEliminaral momento de instalarla en el telefono no registra yo uso wamsever como seridor local
ResponderEliminarhttp://192.168.1.7:8080/tienda_milton/tipoproducto.php
Hola, y se podría usar Internet Information Services para conectar android con mysql?
ResponderEliminarMe da error en if(insertar()) amigo, como lo soluciono?
ResponderEliminarEste comentario ha sido eliminado por el autor.
ResponderEliminarDisculpen mi ignorancia alguien me puede decir donde va pongo el archivo insert.php... muchas gracias
ResponderEliminarsi es en xampp
EliminarC:\xampp\htdocs
lo guardas en la carpeta htdocs y abres tu navegador
http://localhost/insertar.php
realmente tus tutoriales son buenos, me ayudaron bastante , muchas gracias por hacer explicaciones tan detalladas sigue asi
ResponderEliminarHola amigo buen tutoria, quería preguntarle si tienes algún tutorial donde a la hora de insertar los datos me valide si ese dato ya existe o no
ResponderEliminarHola amigo buen tutoria, quería preguntarle si tienes algún tutorial donde a la hora de insertar los datos me valide si ese dato ya existe o no
ResponderEliminarHola Bartolomé Abellán. Gran trabajo y muy bien explicado! Tengo una duda. Yo estoy trabajando con Android Studio y no sé si se necesita importar alguna librería, ya que salta error en "HttpClient" y "HttpPost". Muchas gracias!!
ResponderEliminarHola buen día Bartolomé Abellán, me parece un interesante tutorial y es justamente lo que estaba buscando. Lo he estado tratando de implementar hace muchos días, pero tengo el mismo problema de JOMUAL13 que escribe el 19 de enero de este año. Ya descarge los archivos HttpClient y otros más, pero no se como importarlos a Android para que sean reconocidos y no dé error en: "HttpClient" y "HttpPost".
ResponderEliminarMuchas gracias de antemano por tu atención y por el Tutorial que esta muy bueno.
Buenas noches disculpe tengo un inconveniente todo el proceso esta bien al momento de ingresar los datos no me guardar en la base de datos.
ResponderEliminartengo la duda en donde colocar el insertar.php
Buenas Leidy
EliminarEn tu servidor XAMPP, LAMP o WAMP (no se cual tienes) hay una carpeta denominada htdocs ahí es donde lo tienes que poner.
Yo por ejemplo, tengo, en mi servidor XAMPP (este es el que utilizo), dentro de htdocs una carpeta denominada picarcodigo y ahi meto mis archivos php. Su estructura sería:
XAMPP/htdocs/picarcodigo/cualquier_archivo.php y para llamarlo desde una url como servidor sería:
wwww.nombre_host.com/picarcodigo/cualquier_archivo.php donde nombre_host puede ser localhost (si haces las pruebas a servidor desde tu propia red privada)o un nombre de dominio o ip si el servidor esta fuera de tu red privada. Imaginemos que yo tengo mi servidor alojado en el dominio con ip 62.43.58.147, mi url debería ser:
62.43.58.147/picarcodigo/cualquier_archivo.php
Un saludo, espero que te haya ayudado.
los estoy trabajando con un servidor xampp locamente pero me sale el mensaje ingresado con exito pero cuando voy a verificar en la base de datos . no se guarda
ResponderEliminarDisculpa amigo como hago por que me sale error al escribir las clases de:
ResponderEliminarHttpClient httpclient;
List nameValuePairs;
HttpPost httppost;
httpclient=new DefaultHttpClient();
httppost= new HttpPost("http://192.168.0.11/picarcodigo/insert.php");
te agradeceria la respuesta
antes que nada gracias!! me ayudo mucho, todo salio bien utilizando la direccion 10.0.2.2 para el emulador. pero si paso la aplicación a mi celular que dirección tengo que poner? tambien estoy utilizando el servidor xamp
ResponderEliminarespero puedas ayudarme,
Hola Adriana esepero aun te sirva la respuesta: tendrias que poner la IP de la maquina donde esta instalado el servidor xamp puedes buscarlo de 2 maneras 1) directamente en tu modem (si es que tienes acceso) o en una ventana de comandos de windows pones ipconfig, si estas por wi fi busca la interfaz wireless y donde dice IPV4 esa es tu IP, si tu compu esta por cable busca la interfaz Ethernet he igual donde diga IPV4, esa seria la IP que tendrias que poner. Espero te ayudara saludos
EliminarBrother antes que nada muchas gracias por tu aporte, la verdad me sirvio mucho lo tuve que modificar a como yo lo necesito pero tengo una duda es como se haría para no insertar datos repetidos...
ResponderEliminarsaludos y muchas gracias...
Buenas tardes, alguien puede ayudarme yo lo estoy implementando en un servidor real y aparentemente todo es correcto pero no, al registrar una persona se muestra el toast "persona registrada con éxito" pero a la base de datos no llega la información
ResponderEliminarHola, tengo el mismo problema, lo lograste solucionar? Yo aun no. Me podrias ayudar? Estoy usando hostinger.es
EliminarGracias
Hola muchas gracias por el tutorial esta muy muy bueno y bien explicado, al final comentas de una segunda parte donde usuarias certificados u encriptacion, donde puedo ver esta segunda parte ?? saludos
ResponderEliminarHola buenas, gracias por tu tiempo.
ResponderEliminarTengo un error, no me inserta en la base de datos y sin embargo no tira error de nada, no se que será, ya lo he revisado y el código está muy similar al tuyo. Será que me puedes ayudar un poco?
Gracias.
Hola me aparece el error unfortunately main has estoped.
ResponderEliminarBuenas, necesitas ser mas concreto, ese error puede producirse por varias razones, mirate el logcat, ahi te saldrá porque esta fallando y una descripción más especifica.
EliminarUn saludo
Gracias por el tutorial :D
ResponderEliminarY en caso de que quiera poner un Int en nameValuePairs.add(new BasicNameValuePair(); como sería?? o es forzoso que esté en Srtring??
Saludos ;)
buen día amigo antes que nadas muchas gracias por compartir tu conocimiento muy buen proyecto
ResponderEliminarya tengo mi servidor pero mi maquina local pero al insertar registro me marca Persona no insertada con éxito segun ya tengo todo bien
Hola que tal amigo me dice persona no insertada con exito al querer insertar corro el archivo php con un dato estatico y si insertar agradeceria tu apollo gracias.
ResponderEliminarBuenas, comprueba que la ruta este bien, que las variables se llamen igual, el webservice puede que no esté bien implementado, revísalo, revisa también que la base de datos este correcta...
EliminarLa verdad, te toca ir en plan detective para conocer el error ya que el que no te inserte la persona depende de muchos factores, revisa tu logcat, y si no ves nada claro compártelo por aquí y ayudarte en detectar el error
Hola sigo con el problema este es mi webservice:
ResponderEliminarhola soy nuevo en esto gracias por un tuto muy claro pero comentarte que hice todo correctamente no me marca error alguno y aun asi al enviar los datos con el mensaje "Persona insertada con éxito" no manda nada a mi base de datos... me gustaria un apoyo porfavor...
ResponderEliminarAyudaaa por favor!!!!!
ResponderEliminarLa app me dice "persona insertada con exito" y voy a mi BD y no esta dicho registro.
Que metodo es el que tengo que poner en el boton?
Lo tengo asi:
android:onClick="Insertar"
Hola
ResponderEliminarMuy bueno el ejemple si embargo existe un inconveniente. Si el usuario presiona 2 veces o más esta misma cantidad de veces se registra el envío. Traté de evitarlo dando el atributo de único al campo en la base de datos, esto soluciona el error pero el mensaje en la dispositivo android sigue siendo de ¡ Persona insertada con éxito !
disculpa y la parte de la consulta?
ResponderEliminarBuenas tardes! Saludos desde Venezuela!
ResponderEliminarUna consulta... si en vez de conectarlo de manera local (localhost) lo conecto con un hosting... que datos debo cambiar? me explico: Tengo un hosting con www.servicioshosting.com y quisiera enviar y almacenar datos desde la aplicación móvil a las bases de datos manejadas en phpmyadmin del hosting, pero no he conseguido hacerlo. Agradecido de antemano con toda la aydua que me puedas prestar. Saludos fraternos!
buen tutorial pero tengo problemas con el if(insertar()), no se como solucionarlo. Gracias.
ResponderEliminaruna consulta muy importante ..... es necesario poner la dirección ip para hacer solicitudes usando httppost ?porque cuando pongo en ves de mi ip el localhost no me aparece nada ya deja de comunicarse con la base de datos ..
ResponderEliminarhttppost= new HttpPost("http://10.127.127.1/webservice/mostrar.php"); // aka se comunica
httppost= new HttpPost("http://localhost/webservice/mostrar.php"); // aka ya no nada
Gracias por el aporte! amigo
ResponderEliminarDisculpa amigo tengo un problema soy nueva en esto, quisiera saber Como conectar mi base de datos CSV a google maps por medio de android studio para que me las muestre con marcadores. Podrías ayudarme?
ResponderEliminaryo estoy estudiando programación :p y estamos viendo android pero mi profesor quiere que la conectemos en una base de datos access la aplicación android este método funcionaria conectarla con jdbc:obc: ?
ResponderEliminaryo la hice así como lo tiene usted pero rechazo mi código por que no es una base de datos access xd
podría explicar como hacerlo en un futuro blog ?
Amigo si necesito hacer un webservice pero sqlite
ResponderEliminarAmigo creo que mi error se encuentra en el archivo php, especificamente en el $hostname_localhost, lo digo porque tengo mi propio servidor con mi ip, asi que quiero saber que debo de poner en mi caso, gracias por contestar de antemano
ResponderEliminarTengo que felicitarte! Has echo una muy buena explicacion, me has has ayudado mucho en un proyecto que estoy haciendo, totalmente útil tu explicacion, gracias!
ResponderEliminar