package com.android;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.json.JSONArray;
import org.json.JSONObject;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.KeyEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnKeyListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
public class Inicio extends Activity {
EditText user;
EditText pass;
Button validar;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.login);
user = (EditText) findViewById(R.id.txtUsuario);
pass = (EditText) findViewById(R.id.txtPass);
validar = (Button) findViewById(R.id.btnValidar);
validar.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
ArrayList parametros = new ArrayList();
parametros.add("Usuario");
parametros.add(user.getText().toString());
parametros.add("Contrasena");
parametros.add(pass.getText().toString());
// Llamada a Servidor Web PHP
try {
Post post = new Post();
JSONArray datos = post.getServerData(parametros,
"http://95.234.67.44/login.php");
// No se puede poner localhost, carga la consola de Windows
// y escribe ipconfig/all para ver tu IP
if (datos != null && datos.length() > 0) {
JSONObject json_data = datos.getJSONObject(0);
int numRegistrados = json_data.getInt("ID_USUARIO");
if (numRegistrados > 0) {
Toast.makeText(getBaseContext(),
"Usuario correcto. ", Toast.LENGTH_SHORT)
.show();
}
} else {
Toast.makeText(getBaseContext(),
"Usuario incorrecto. ", Toast.LENGTH_SHORT)
.show();
}
} catch (Exception e) {
Toast.makeText(getBaseContext(),
"Error al conectar con el servidor. ",
Toast.LENGTH_SHORT).show();
}
// FIN Llamada a Servidor Web PHP
}
});
}
class Post {
private InputStream is = null;
private String respuesta = "";
private void conectaPost(ArrayList parametros, String URL) {
ArrayList nameValuePairs;
try {
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost(URL);
nameValuePairs = new ArrayList();
if (parametros != null) {
for (int i = 0; i < parametros.size() - 1; i += 2) {
nameValuePairs.add(new BasicNameValuePair((String)parametros.get(i), (String)parametros.get(i + 1)));
}
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
}
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());
} finally {
}
}
private void getRespuestaPost() {
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();
respuesta = sb.toString();
Log.e("log_tag", "Cadena JSon " + respuesta);
} catch (Exception e) {
Log.e("log_tag", "Error converting result " + e.toString());
}
}
@SuppressWarnings("finally")
private JSONArray getJsonArray() {
JSONArray jArray = null;
try {
jArray = new JSONArray(respuesta);
} catch (Exception e) {
} finally {
return jArray;
}
}
public JSONArray getServerData(ArrayList parametros, String URL) {
conectaPost(parametros, URL);
if (is != null) {
getRespuestaPost();
}
if (respuesta != null && respuesta.trim() != "") {
return getJsonArray();
} else {
return null;
}
}
}
}
Muy muy buen tutorial, me ha venido de perlas. Gracias!
ResponderEliminar¿Cómo puedo hacer lo mismo a una base de datos remotamente?...
ResponderEliminarMi BD está en Internet...
¿También se puede cambiando lo de...
JSONArray datos = post.getServerData(parametros, "http://95.234.67.44/login.php");
....por la direccion de mi BD?
o cambio 'localhost'...
$link = mysql_connect('localhost', 'root', '');
....por la direccion de mi BD, root por mi usuario y poner mi pass??
$link = mysql_connect('localhost', 'root', '');
ResponderEliminarEn esta línea debes indicar la dirección IP Externa del equipo en el que se encuentra la Base de Datos.
Después, deberás redireccionar el router para que dentro de tu red local, vaya al equipo donde se encuentra la Base de Datos MySql (o la que quieras utilizar)
Hola!!! es de lo mas util que he visto desde hace mucho tiempo!! pero com no podia ser de otra manera, no me funciona. Siempre me pone usuario incorrecto. Sin embargo si apago el equipo donde esta la base de datos se queda pillada la aplicacion asi que entiendo que intenta conectar con la base de datos. Si la base de datos es "bd" y la tabla se llama "movil" solo tendria que cambiar las lineas:
ResponderEliminartry {
Post post = new Post();
JSONArray datos = post.getServerData(parametros,
"http://95.234.67.44/login.php");
mysql_select_db("fastfoodcompany");
$q=mysql_query("SELECT * FROM usuarios WHERE USER='{$user}' AND PASSWORD='{$pass}' ");
por
try {
Post post = new Post();
JSONArray datos = post.getServerData(parametros,
"http://192.168.1.40/login.php");
mysql_select_db("bd");
$q=mysql_query("SELECT * FROM movil WHERE USER='{$user}' AND PASSWORD='{$pass}' ");
Si solo es eso, ¿alguna sugerencia?? algo que verificar???
Muchas gracias por el aporte!!
Buenas!!
ResponderEliminarTe voy a dar una guía de pasos para que detectes en qué capa se encuentra el error:
* Model (MySql)
* Ejecuta la sentencia SQL en la base de datos para evitar errores de sintaxis.
* Control (Script PHP)
* Modifica la variable POST por GET, y accede al script PHP desde el navegador, para comprobar errores en el script PHP.
* $user = $_GET['Usuario'];
* Carga en el navegador lo siguiente: http://95.234.67.44/login.php?Usuario=1, por ejemplo.
* View (Cliente Android)
* Comprueba que coincidan los parámetros declarados en el ArrayList con los declarados en el script PHP (exactamente iguales)
Te dejo un enlace a un seminario que preparé que creo que te puede ayudar en tu desarrollo.
ResponderEliminarhttps://sites.google.com/a/svalero.com/seas-taller-geolocalizacion/
Un saludo
Alberto Hernández Akkari
Gracias por la ayuda Alberto, en cuanto resuelva este paso miraré los proyectos de tu seminario, tiene pinta de poderse sacar cosas muy interesantes... A mi la sensación que tengo es que login.php no se está ejecutando, ya que tanto la traza de la consola eclipse muestran los textos dentro del archivo pero no las respuestas de sql. Con el navegador veo esto al poner la sentencia:
ResponderEliminarhttp://192.168.1.60/login.php?Usuario=pepe
veo esto dentro del navegador, es decir como un edit del fichero pero todo seguido.
login.php $user = $_POST['Usuario']; $pass = $_POST['Contrasena']; $link = mysql_connect('localhost', 'root', ''); if (!$link) { die('No pudo conectar: ' . mysql_error()); } mysql_select_db("bd"); $q=mysql_query("SELECT * FROM usuarios WHERE USER='{$user}' AND PASSWORD='{$pass}'"); while($e=mysql_fetch_assoc($q)) $output[]=$e; print(json_encode($output)); mysql_close($link); ?>
la verdad que no se porque pasa...
Oye no tendras en zip todo el proyecto, por que por mas que intento no corre el programa, lo que pasa que si lo carga y todo pero cuando pongo validar no hace nada ni da correcto o incorrecto cual crees que esl problema, o en que eclipse lo hiciste o que version de android fue??
ResponderEliminarEspero tu ayuda
vaya que tontería... la cabecera del fichero php tiene un bugs por eso no lo entiende como sentencias php...
ResponderEliminarahora el problema es conectar desde el movil cuando esta en la red vodafone. He usado la ip externa en el la linea original:
ResponderEliminartry {
Post post = new Post();
JSONArray datos = post.getServerData(parametros,
"http://95.234.67.44/login.php");
he redireccionado el router el puerto 80 a la ip interna.
y he dejado la linea del fichero php tal cual, ya que si la cambio por la ip externa no funciona ni desde dentro.
$link = mysql_connect('localhost', 'root', '');
if (!$link) {
die('No pudo conectar: ' . mysql_error());
He creado un usuario root mysql en vez de en localhost, con la ip pero nada.
después de todo eso sale
Alguna idea?
que no llega al servidor mysql si te esperas minutos al final termina dandolo... Eclipse normal de android 3.7.1 y lo tengo para 14 pero se ejecuta desde 7. El tema no creo que vaya por ahí sino que no encuentra el servidor desde el 3G cambiando la ip por una fija externa. He llegado a poner incluso en el router todos los puertos a esa ip pero nada.
ResponderEliminarMuchisimas gracias¡¡ llevo 2 dias peleandome y al final funciono tu codigo ;).
ResponderEliminarNo di montado en local el servidor, y eso que configure el router(NAT), al final lo subi a un servidor gratuito cree la BD y todo perfect.
Ahora a seguir .. para insertar BD..etc..
Te acabo enviar solicitud del twitter.
Hola, gracias por el post, es muy util, pero quisiera saber como podria descargar toda la informacion que tengo en mi BD MySQL y vaciarla dentro de SQLite, para acceder remotamente solo una vez.
ResponderEliminarespero que puedas ayudarme
Yo tambien tengo una duda en cuanto al ejemplo del login.php sale un texto en el navegador y ya, y cuando corro la aplicacion con el emulador siempre me dice que el usuario es incorrecto, alguien ha solucionado el problema???
ResponderEliminarBueno, no se si ya se dieron cuenta que el archivo php le falta la instruccion de apertura <?php
ResponderEliminarY bueno, ya corregido nos manda unos errores los cuales he resuelto los dos primeros que son cambiar los $_POST por @$_POST
Los otros dos errores aun no los resuelvo, si se algo lo publico inmediatamente, excelente post Alberto!!! Estoy checando tu seminario.... =p
Que raro, me sigue apareciendo la conexión como refused y eso que he puesto la ip privada. El script de php se ejecuta correctamente.
ResponderEliminarsigo con estos dos errores:
ResponderEliminarNotice: Undefined variable: output in C:\wamp\www\login.php on line 20
null
La linea es:
print(json_encode($output));
Alguien ya corrigio esto??? =(
Pues miren, a mi ya no me marca error, no lo he probado pero pues les dejo el codigo para que si a alguien le sirve lo haga, y si les sirvió que comente. Recuerden que si todos cooperamos esto crece mas y más...
ResponderEliminarHola me parece excelente tu tutorial.
ResponderEliminarPero tengo un problema, primero el package com.android me dice que no coincide con el paquete esperado, asi que lo comente y aparentemente se arreglo, pero otro error sigue, me dice "The method onClick(View) of type new View.OnClickListener(){} must override a superclass method" en la linea
public void onClick(View v) {
estoy trabajando con eclipse y la plataforma android 2.1 con el jdk 1.7
tambien en la interface login.xml me dice que el tag "absolutelayout is deprecated" ¿seran problemas de compatibilidad o de version?
Agradeceré mucho tu ayuda.
Saludos.
EXELENTE, SOLO QUE ME TIRA ERROR CUANDO CREA EL JSONObjet, pero desde el JSONArray puedo leer los valores
ResponderEliminarHola a todos!! yo estoy intentando conectarme a una base de datos mysql con la version android 2.1, pero no consigo que me muestre los datos,
ResponderEliminarpor un lado tengo los datos que me muestra en la dirección http://www.xxxx.es/login.php, que son los siguientes
[{"id":"4","titulo":"atencionCliente.jpg","curso_id ":"29","numero":"1","tema":"3","subtema":"uno "},id":"7","titulo":"00.jpg","curso_id":"34","nu mero":"1","tema":"5","subtema":"Indice "}]
y por otro el codigo java
public class CursoActivity extends Activity {
AutoCompleteTextView texto;
Button boton;
TextView resultado;
String total;
public void onCreate(Bundle SavedInstanceState)
{
super.onCreate(SavedInstanceState);
setContentView(R.layout.curso);
texto = (AutoCompleteTextView) findViewById(R.id.cajaTexto);
// texto.setAdapter(adapter);
boton = (Button) findViewById(R.id.botonBuscar);
resultado = (TextView) findViewById(R.id.resultado);
boton.setOnClickListener (new OnClickListener()
{
public void onClick(View v)
{
resultado.setText(getServerData(total));
}
});
}
//se declara la direccion ip del servidor
public final static String url = "XXXXXX(datos que muestra anteriormente)";
private String getServerData (String returnString)
{
String txt = texto.getText().toString();
if(!txt.equals(""))
{
InputStream is = null;
String result ="";
//Se envian datos de consulta;
ArrayList parametros = new ArrayList();
parametros.add(new BasicNameValuePair("nombre", "1"));
//Conectando a la base de datos
try
{
HttpClient cliente = new DefaultHttpClient();
HttpPost direccion = new HttpPost(url);
HttpResponse respuesta = cliente.execute(direccion);
respuesta.setEntity(new UrlEncodedFormEntity(parametros));
HttpEntity entity = respuesta.getEntity();
is = entity.getContent();
}
catch(Exception e)
{
Log.e("log_tag", "Error en la conexion a la base de datos"+e.toString());
Toast.makeText(this, "Error al conectar a la base de datos", Toast.LENGTH_LONG).show();
}
//Transformar respuesta de la conexion en string
try
{
BufferedReader reader = new BufferedReader (new InputStreamReader(is, "iso-8859-1"),8);
StringBuilder sb = new StringBuilder();
String linea = null;
while ((linea = reader.readLine()) != null)
{
sb.append(linea + "\n");
}
is.close();
result = sb.toString();
Log.e("log_tag", "Cadena JSON" + result);
}
catch(Exception e)
{
Log.e("log_tag", "Error al transformar datos. "+e.toString());
Toast.makeText(this, "Error al transformar datos", Toast.LENGTH_LONG).show();
}
//Recibir datos en formato JSON
try
{
JSONArray jArreglo = new JSONArray(result);
for(int i=0; i<jArreglo.length(); i++)
{
JSONObject json_datos = jArreglo.getJSONObject(i);
Log.i("log_tag", "id: "+json_datos.getInt("id")+
", titulo:"+json_datos.getString("titulo")+
", curso_id: "+json_datos.getInt("curso_id")+
", numero: "+json_datos.getInt("numero")+
", tema: "+json_datos.getInt("tema")+
", subtema: "+json_datos.getString("subtema"));
//Los datos se muestran en la pantalla
resultado.setText(total);
returnString += "\n\t" + jArreglo.getJSONObject(i);
}
}
catch (JSONException e)
{
Log.e("log_tag", "Error al recibir datos"+e.toString());
Toast.makeText(this, "Error al mostrar datos", Toast.LENGTH_LONG).show();
}
}
else Toast.makeText(this, "Escriba un curso", Toast.LENGTH_LONG).show();
return returnString;
}
}
y me sale un error al recibir datosorg.json.JSONException.
que puedo estar haciendo mal?.
Buenas noches,
ResponderEliminarSr. Alberto Hernández Akkari,
He realizado su tutorial y funciona excelentemente, en el emulador 2.3 android,
Pero, para la versión de 3.2 de una tableta no funciona , me pudieses ayudar
aplicación completa
http://www.cmdima.com/phpjson/json1.zip
http://www.cmdima.com/phpjson/login.php
Darry Castro
Buenas noches,
ResponderEliminarMe fascina que buscando ejemplos por internet sobre programación en Android, para realizar la Tarea de fin de curso Seas (Android) , encuentre a mi profesor.
Muy buen tutorial Alberto. Un Saludo.
a mi me funciona normal usando wifi pero me conecto con plan de datos y nada no funciona
ResponderEliminarMuchas gracias por tu genial tutorial. Me ha servido de mucho.
ResponderEliminarTe estoy muy agradecido por compartir tus conocimientos con nosotros.
Estimados: googleando encontre la solución al problema JSONObject, hay que declarar la variable ANTES DEL WHILE:
ResponderEliminar$output = array();
mi problema: la app arroja el toast "Error al conectar con el servidor".
Si alguien encuentra algo o logra hacer funcional la app correctamente, por favor postee!!!! GRACIAS!!!
amigos tengo un problema en el public void onClick(View v) me marca como error sabran como resolverlo de favor???
ResponderEliminarPrimero que nada muchas gracias por el tutorial, me ha servido mucho.
ResponderEliminarSolo tengo un detalle, al ejecutar el programa en el emulador la consola de mensajes de eclipse me arroja que la cadena obtenida es null, entiendo que se conecta al servidor porque llega al metodo getRespuestaPost.
He ejecutado el script php desde mi navegador y poniendo directamente en el archivo el usuario y la contraseña y funciona perfectamente.
Alguna idea??
Ami me sale en el log del eclipse cadena JSon y me dice usuario incorrecto alguien sabe que puede ser.
ResponderEliminarSalu2
Alguien sabe como puedo mandar un archivo binario, como esta la clase me da error al madarlo gracias.
ResponderEliminarSalu2
Hola Akkari!
ResponderEliminarSimplemente, que a mi el código me iba perfecto, pero en el LogCat vi que me saltaba una excepción java.net.SocketException: Permission denied, básicamente que no tenía permisos de Internet.
lo solucioné cambiando:
y poniéndolo antes de la etiqueta:
<application
Y funcionó!
Un saludo
Muchas gracias, la verdad me sirvió mucho, lo necesitaba para el chat que estoy realizando.
ResponderEliminarSaludos
Aye compañeros quien me puede colaborar, se me presenta el error que dice "ERROR AL CONECTAR AL SERVIDOR", No se que pueda pasar, realice un seguimiento y me doy cuenta que los parametros si llegan correctamente, tambien ya realice las pruebas en el archivo .php y nada.
ResponderEliminarAyudaaaaaaaaaaaaaa.. Por favor.
Gracias.
Saludos. Yo llevo unos días con esto y no al compilar no me da ningún error. el problema que yo tengo que es que me da usuario incorrecto. Cuando lanzo el php por navegador. me saca bien los valores del JSON, es decir que la conexion a la BD y la consulta la hace bien, pero me da la sensación que con el "print(json_encode($output));" android no recibe nada.
ResponderEliminarAlguien me podría decir si puede ser la versión. Lo tengo hecho para android 2.2. Si no es por eso agradecer que alguien me diga porque android recibe null.
Gracias
Barrrientos.. poco sé, pero vamos, ¿tienes el módulo json_encode activo en tu php? Mírale con phpinfo()
ResponderEliminarAgradecerte muchísimo, Alberto, este manual y el seminario de geoposicionamiento; no había forma de enterarme hasta tus ejemplos.
Duda 'practica': ¿cómo hacer una consulta de solo los puntos a 'X' km de tí?
Gracias de nuevo.
Muchas gracias por la sugerencia Sara pero no es eso. Lo he comprobado y si esta habilitada. de todas formas supongo que si no la tuviera me marcaría un error, y no es así. Además, el print me saca el contenido de JSON entero, pero en el codigo android, el condicional "if (datos!=null && datos.length()>0)" no lo pasa, ya que el datos.length() no sale mayor que cero (cosa que no entiendo). Pero gracias de todas formas.
ResponderEliminarSi alguien tiene otra sugerencia, la agradecería muchisimo.
Lo primero, darte las gracias por hacer este pequeño tutorial. Me surgen dos dudas al leer el código, una desde la aplicación android y la otra desde el servidor PHP:
ResponderEliminar1. ¿Funcionaría si en vez de una IP colocásemos un nombre de dominio?
2. Para imprimir los datos en el servidor, utilizas la función "Print". ¿La aplicación recibiría también los resultados utilizando "echo"?
Muchas gracias
ami no se que pasa pero siempre me dice que el usuario es incorrecto yq vi todos los pos y no me da gracias de todas formas esta muy bueno
ResponderEliminar06-23 17:04:29.615: E/log_tag(371): Cadena JSon //login.php
06-23 17:04:29.615: E/log_tag(371): $user = $_POST['Usuario'];
06-23 17:04:29.615: E/log_tag(371): $pass = $_POST['Contrasena'];
06-23 17:04:29.615: E/log_tag(371): $link = mysql_connect('localhost', 'root', '');
06-23 17:04:29.615: E/log_tag(371): if (!$link) {
06-23 17:04:29.615: E/log_tag(371): die('No pudo conectar con fer-PHP : ' . mysql_error());
06-23 17:04:29.615: E/log_tag(371): }
06-23 17:04:29.615: E/log_tag(371): mysql_select_db("v2b");
06-23 17:04:29.615: E/log_tag(371): $q=mysql_query("SELECT * FROM usuarios WHERE USER='{$user}' AND PASSWORD='{$pass}' ");
06-23 17:04:29.615: E/log_tag(371): $output = array();
06-23 17:04:29.615: E/log_tag(371): while($e=mysql_fetch_assoc($q))
06-23 17:04:29.615: E/log_tag(371): $output[]=$e;
06-23 17:04:29.615: E/log_tag(371): print(json_encode($output));
06-23 17:04:29.615: E/log_tag(371): mysql_close($link);
06-23 17:04:29.615: E/log_tag(371): ?>
Excelente tutorial! Me funciono fino. El error "ERROR AL CONECTAR AL SERVIDOR" me pasaba por esto:
ResponderEliminarint numRegistrados = json_data.getInt("ID_USUARIO");
reemplace por esto:
int numRegistrados = json_data.getInt("id_usuario");
y funciono :D:D:D tengan cuidado en la declaración de las variables en la BD ya que luego deben ser llamadas de igual manera tanto en el servidor como en la aplicación.
Si alguno de vosotros trata de ejecutar el programa en Android 3.0 o superior, obtendrá una excepción de uso de red en el hilo de ejecución principal, puede que algunos errores de conexión con el servidor os vengan por ahí.
ResponderEliminarUn saludo,
Álvaro.
Hola, estoy intentando hacer INSERT en vez de SELECT, pero ni se queja ni se actualiza lo que quiero de la Base de Datos...
ResponderEliminarSe supone que debería funcionar, ¿no?
a los que no le funciona es por que la pagina de php le falta el tag
ResponderEliminary todo funcionando filete muchas gracias
Alguien me puede decir por que la poner en el navegador http://192.168.1.60/login.php?Usuario=1
ResponderEliminarme sale 403 forbidden
You don't have permission to access /login.php on this server.
creo que es lo unico que no he podido resolver y creo que por esa razon siempre me mada un "usuario incorrecto" en la aplicacion
Que buen tutorial, felicidades ^^ he aprendido mucho mas que lo que buscaba jeje
ResponderEliminarOk resuelto lo de 403 fobiden pero ahora me sale un error en la larte de log_tag, cadena JSon+ resuesta en laconsola de errores aparece:
ResponderEliminarlog tag cadena JSon {id=2,Usuario=Eduardo,Comtrasena=lalito}
esto aparece en rojo cuando en la iterfaz pongo el usuario y la contraseña y me manda el mensajito de usuario incorrecto
espero su ayuda
respuesta a Aceituna Mecanica, tienes que mirar en tu codigo donde esta Log.e(..) que imprime este mensaje,
ResponderEliminarde todas formas esto no quiere decir que tienes un error, en cualquier parte del código se puede poner un Log.e() que imprime error.
es posible que tengas 2 usuarios que sus nombres y contraseña empiezan por lo mismo, y como resultado de la consulta te sale un array que tienes que recorrer con un for y comparar con con los datos que has introducido,
String c1="";
String u1="";
boolean existe = false;
for(int j=0;j<jArray.length();j++){
if(!existe){
JSONObject json_data = jArray.getJSONObject(j);
u1 = json_data.getString("USUARIO");
c1=json_data.getString("CONTRASENA");} if(u1.equals(usuario.getText().toString())&& c1.equals(contrasena.getText().toString())){
existe = true;}
}//fin for
if(existe){resultado.setText("Usuario Valido"); }
else{resultado.setText(" Usuario no Valido");
Log.e("log_tag", "usuario:" +u1+"cont"+c1);}
Alvaro Racero,
ResponderEliminardepende de que servidor,
en mi caso yo intentaba conctor android con una BD mysql, tenia android 4.0 y no me funcionó hasta que cambie la version de android a 2.3.3.
Ok Muchas gracias bro pero aun asi sabes estube poniendo mensajitos para saber en donde estaba mi erro y resulta que en esta parte
ResponderEliminarprivate JSONArray getJsonArray() {
JSONArray jArray = null;
try {
jArray = new JSONArray(respuesta);
Log.e("log_tag", "OK si hay datos" + respuesta);
} catch (Exception e) {
Log.e("log_tag", "Bueno hasta aqui no llega nada " + e.toString());
} finally {
return jArray;
}
}
Me manda directo a la excepcion "Bueno aqui no hay nada"
Me parece que el arreglo no lo almacena.
Espero su ayuda Bendiciones a Todos
Hola Aceituna mecanica, como este error puede ser por mchas cosas, lo unico que puedo hacer es enviart e mi codigo, que para mi es muy facil y funciona 100%.
ResponderEliminarpublic static final String strURLPost = "http://197.0.0.0/login.php";
EditText usuario=null;
EditText contrasena=null;
Button validar=null;
TextView resultado=null;
Button consulta=null;
Button cancelar=null;
boolean existe=true;
public void onCreate(final Bundle savedInstanceState) {
try{
super.onCreate(savedInstanceState);
primeraPantalla();
}catch(Exception e){Log.i("Error 1", e.toString());}
}
public void primeraPantalla(){
setContentView(R.layout.login);
usuario = (EditText) findViewById(R.id.editText1);
usuario.requestFocus();
contrasena = (EditText) findViewById(R.id.editText2);
validar = (Button) findViewById(R.id.button1);
resultado = (TextView) findViewById(R.id.textView3);
resultado.setVisibility(View.INVISIBLE);
validar.setOnClickListener(new OnClickListener() {
public void onClick(View args0){
try {
// cargarDatosdesdeBD(strURLGet);
identificar(strURLPost);
} catch (Exception e) {
// TODO Auto-generated catch block
Log.e("Metodo postData",e.toString());
}
}});
}
protected void identificar(String postURL) throws Exception{
HttpResponse response=null;
String result=null;
InputStream is=null;
try{
HttpPost post = new HttpPost(postURL);
ArrayList parameters = new ArrayList ();
parameters.add(new BasicNameValuePair("Usuario", usuario.getText().toString()));
parameters.add(new BasicNameValuePair("Contrasena", contrasena.getText().toString()));
UrlEncodedFormEntity sendentity = new UrlEncodedFormEntity(parameters);
post.setEntity(sendentity);
HttpClient client = new DefaultHttpClient();
response = client.execute(post);
HttpEntity entity = response.getEntity();
is = entity.getContent();
BufferedReader in = new BufferedReader(new InputStreamReader(is,"iso-8859-1"),Cool;
StringBuilder sb = new StringBuilder();
String line = null;
while ((line = in.readLine()) != null) {
sb.append(line + "\n");
}
is.close();
result=sb.toString();
JSONArray jArray = new JSONArray(result);
String u1 = null;
String c1 = null;
for(int j=0;j
suerte.
Lo logre como lo hice en mi base de datos esta linea debía colocar mi campo en la DB int numRegistrados = json_data.getInt("id_usuario");
ResponderEliminarquedando la mía así int numRegistrados = json_data.getInt("login"); gracias por el tutorial por fin logre algo después de días de leer
Solo funciona si los registros son 1 en usuario y 2 clave, si coloco usuario ADMIN Y clave FHJ, me dice error al conectar alguna idea?
ResponderEliminarMuchas gracias! muy útil.
ResponderEliminarSi a alguien le falla el json_decode por su php inferior al 5.1 aquí está la función que le solucionará los problemas!:
http://au.php.net/manual/en/function.json-encode.php#100835
hola amigos me gustaría saber como hago solo el envió de la información a mi base de datos que me la guarde..... agradezco su colaboración soy nuevo en la programación Android
ResponderEliminarHola! A mi me pasa que el php no me toma el $_POST. Pongo en el navegador la consulta y funciona correctamente. Saben porque me pasa esto?? Les agradeceria mucho su ayuda
ResponderEliminarhola el tutorial es muy interesante muchas gracias , pero como pordría llevarlo a otro activity???????????
ResponderEliminarlo que pasa es que no quiero solo validar, si es usuario correcto, me gustaría llevarlo a otro activityyyyyyy, lo que hice fue ponerle intent pero me sale error al conectar al servidor, que puedo hacer?????
ResponderEliminarLlevo horas con este codigo, lo tengo mas que trazado y he mirado las excepciones que me provcoca en internet: me falla en esta linea
ResponderEliminarHttpResponse response=httpclient.execute(httppost);
me da la siguiente excepcion
networOnMainThreadException
y por lo que he leido en internet parece ser que desde la version de Android 3.0 no deja hacerlo en hilo principal, hay que hacer esto mismo de manera Runnable....
ideas????
Siiiii!!!! he conseguido eliminar esa excepcion!!, hay que hacerse la clase post aparte en un.java aparte, y tiene k implementar Runnable
ResponderEliminary tachaaaan! deja de aparecer la dichosa excepcion!!
yuhuuuuu!!! XDD
Hola Carlos diago, podrías explicarme como lo has hecho para que no te de ese error. ¿Me pasas algo de codigo? Entiendo que el post hay que hacerlo en una clase aparte pero lo de implementar de runnable no lo entiendo.
ResponderEliminarGracias.
para todos los que hicieron como yo COPIARON Y PEGARON y no les funciona CHEQUEN QUE el archivo login.php tenga el identificador de inicio de codigo php:
ResponderEliminar<?php
Ya que en el recuadro no sale y por eso no me funcionaba
Hola, podrías resubir las imágenes porfavor, ya no se ven para guiarse mejor, al parecer esta excelente este tuto. Saludos
ResponderEliminarSaludos, tengo una duda, conque version de android corre este ejemplo..hay algun tutorial para hacer lomismo q este ejemplo pero con android 4.2...gracias....
ResponderEliminarlisto el ejemplo funciono muy bien ahora como hago esto para postgreSql porfa si me pueden ayudar...????
ResponderEliminarPoseidon 771, con version de sdk y de android trabajaste y si me puedes enviar tu ejemplo compilado para ver mis errores. Por que ya llevó dos días sin poder hacerlo funcionar. Gracias de antemano.
ResponderEliminarSaludos alepoing.
Disculpa Poseidon77i podrias enviarme tu ejemplo, e indicarme sdk empleaste. Muchas Gracias.
ResponderEliminarPor petición de muchos compañeros, os adjunto un ejercicio de ayuda con hilos (threads).
ResponderEliminarIncluye:
Esquema de base de datos - MySql
Carpeta con los _script_s PHP e imágenes que se deben copiar en \"C:\\wamp\\www\\WEB_GROUPON\".
Proyecto Android con la plataforma 4.2 y mapas.
En caso de que os muestre errores de compilación, os adjunto unos pasos para limpiar los errores.
Carpeta: Pasos para limpiar los proyectos.
Enlace con toda la información:
https://www.dropbox.com/s/4zcxf7fwa5ujd9c/AyudaPracticaFinal.rar
(Copia el enlace, abre una nueva pestaña del navegador y pega el enlace)
Un saludo
Alberto Hernández Akkari (Android)
AMIGOOOOOOOOO UN FAVORR AYUDAME TAN SOLO LO Q YO KIERO HACER LO MISMO QUE TU POST PERO INCLIYENDOLE DESPUES DEL LOGUEO UN VENTANA DONDE PUEDA INSERTAR DATOS como por ejemplo nombres apellidos profesion lo q sea en una tabla TU CREES Q ESO SEA POSIBLE AYUDAME CON ESO PORFAVORR GRACIASSS MI CORREO ES davidbaygorrea@gmail.com
ResponderEliminaryo tngo el mismo problema que david me hace falta insertar datos en una bd phpmyadmin cn json desde eclipse.
ResponderEliminarYa lo he intentado y el log cat me devuelve el siguiente error ya que no recojo nada desde eclipse en el json porque no me interesa tener en eclipse ningún dato de los que inserto bien para mostrar por pantalla bien para usarlo después para otra consulta.
Error parsing data org.json.JSONException: End of input at character 0 of
me gustaría tener un ejemplo o una explicación de la inserción de datos.
gracias de antemano mi correo es el siguiente:
getxoco4@gmail.com
solucionado he creado setServerdata y solo hago la llamada a conectaPost(parametros, URL); eliminando el getRespuestaPost(); que es el que espera recibir algo.
ResponderEliminarEl siguiente paso es como subir una imagen a esa base de datos usando move_uploaded_file no controlo mucho php y no me funciona por muchas vueltas que le doy si alguien sabe la solución agradeceria que la pusiese. gracias.
hola hermano aver si me puedes dar un ejemplo de insercion de datos de esta manera tengo programados numeros aleatorios q cuando de mayor o igual a 100 este inserte datos desde el movil al servidor php disculpa la ignorancia soy nuevo en java y quiero aprender sobre esto muchas grasias :D exelente tu tutorial me llamo jose
ResponderEliminarhola hermanaso tu tuto esta genial te tengo una pregunta puesto q soy novato en cosas de java yo quiero hacer lo siguiente se generaran numeros aleatorios y quiero q cada vez q el numero sea superior a 120 este inserte una serie de datos sin necesidad de ejecutar un boton o algo no se si me explico quiero hacer inserciones a la base de datos sin necesidad de usar un boton para ejecutar la accion si no cuando se genere un numero superior a 120 no se si tengas algun ejemplo de esto realmente me interesa mi nombre es jose dejo mi correo jose_xp_799@hotmail.com
ResponderEliminarFunciona muy bien con android 2.3.3 y un servidor alojado en un sitio web. ¡ABSTENERSE A PROBARLO EN 4.X! estuve 30 min intentandolo hasta que leí los comentarios.
ResponderEliminaren el emulador me funciona de maravilla, pero al momento de poner la apk en mi celular dice ingresado con exito pero sin embargo no aparece nada en la base de datos alguien podria ayudarme por favor estoy usando el wampserver y conexion por wifi
ResponderEliminarhola ayuda me sale esto :
ResponderEliminarError in http connection android.os.NetworkOnMainThreadException
los parametros estan bien escritos, permisos todo pero no encuentro que podra ser ayuda porfa."!
Hola,
ResponderEliminara mi también me da el error de http connection android.os.NetworkOnMainThreadException
Buen dia el JSONArray datos = post.getServerData nunca me trae valores sabes pq?
ResponderEliminar