Login en Android con conexión a mysql.
Hola, bueno les escribo una forma sencilla de crear un login y conectarnos a mysql para verificar si el usuario existe como hacemos esto muy sencillo primero que nada crearemos el XML para el diseño de la aplicación:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <EditText android:layout_width="fill_parent" android:layout_height="wrap_content" android:hint="Usuario" android:id="@+id/etUsuario" /> <EditText android:layout_width="fill_parent" android:layout_height="wrap_content" android:hint="Contraseña" android:id="@+id/etContrasena" android:password="true" /> <Button android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="Ingresar" android:id="@+id/btIngresar"/> </LinearLayout>
Ahora para conectarnos utilizaremos el método POST de PHP para esto creamos una calse que nos permita conectarnos "POST.JAVA"
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.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 android.util.Log; public 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; } } }
Ahora crearemos en en la clase mainActivity detectarmos si es correcto el usuario en base al boton y el usuario ingresado, mediante un servicio PHP.
import java.util.ArrayList; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.EditText; import android.widget.Toast; public class LoginzroxActivity extends Activity implements OnClickListener { EditText txtUsuario, txtPassword; Button connectar; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); connectar = (Button)findViewById(R.id.btIngresar); txtUsuario = (EditText) findViewById(R.id.etUsuario); txtPassword = (EditText) findViewById(R.id.etContrasena); connectar.setOnClickListener(this); } public void onClick(View v) { // TODO Auto-generated method stub switch (v.getId()) { case R.id.btIngresar: if (txtUsuario.getText().toString().equals("") || txtPassword.getText().toString().equals("")) { Toast toast = Toast.makeText(this, "Verifica tus datos", Toast.LENGTH_LONG); toast.show(); } else { ArrayList parametros = new ArrayList(); parametros.add("Usuario"); parametros.add(txtUsuario.getText().toString()); parametros.add("Password"); parametros.add(txtPassword.getText().toString()); // Llamada al servidor web php try { Post post = new Post(); String server_ip = "http://192.168.1.74//"; JSONArray datos = post.getServerData(parametros, server_ip + "Proyecto_socialITAAndroid/hacerLogin.php"); if (datos != null && datos.length() > 0) { JSONObject json_data = datos.getJSONObject(0); int numdevueltos = json_data.getInt("cve_usuario"); if (numdevueltos > 0) { Toast.makeText(getBaseContext(), "Usuario Correcto...", Toast.LENGTH_SHORT).show(); } } else { Toast.makeText(getBaseContext(), "Usuario o Contraseña inválida", Toast.LENGTH_SHORT).show(); } } catch (JSONException e) { Toast.makeText(getBaseContext(), "Error al conectar con el servidor. ", Toast.LENGTH_SHORT).show(); } } break; } } }
El servicio PHP sería algo así:
<?php //hacerLogin.php $user = $_POST['Usuario']; $pass = $_POST['Password']; $link = mysql_connect('localhost', 'root', ''); if (!$link) { die('No pudo conectar: ' . mysql_error()); } mysql_select_db("dsc"); $q=mysql_query("SELECT * FROM usuarios
WHERE usuario='{user}' AND password='{pass}' "); while($datos=mysql_fetch_assoc($q)) $output[]=$datos; print(json_encode($output)); mysql_close($link); ?>
Descargar
Comentarios
"Proyecto_socialITAAndroid/hacerLogin2.php"); cual es ese no entiendo no es el mismoProyecto_socialITAAndroid/hacerLogin.php"); por otra parte la aplicacion me corre pero me dice puro clave o usuario invalido XD y yo mismo toy insertando los datos jajaja q son jose de user y pass 1234 para provar pero igual no dice invalido XD
nombre de la tabla usuarios
1 usuario varchar(20) latin1_swedish_ci No Ninguna Cambiar Eliminar Más
2 password varchar(20) latin1_swedish_ci No Ninguna Cambiar Eliminar Más
aqui esta la esctructura de la base de datos como la estoy usando abra algo mal o.o ya me percate q el codigo q postiaste no esta hacerlogin2 y le acomode pero igual solo me dice user o pass invalidos XD q error estare cometiendo
04-23 03:11:11.034: W/KeyCharacterMap(278): Using default keymap: /system/usr/keychars/qwerty.kcm.bin
04-23 03:11:19.474: E/log_tag(278): Cadena JSon
04-23 03:11:19.474: E/log_tag(278): Notice: Undefined variable: output in C:\xampp\htdocs\Proyecto_socialITAAndroid\hacerLogin.php on line 21
04-23 03:11:19.474: E/log_tag(278): null
esos son lo errores o.o
por favor me podrías ayudar revisando el codigo y explicandome como lo de la lectura de los datos.
Que tengas un excelente día Saludos.
Esta en esta línea:
int numdevueltos = json_data.getInt("cve_usuario");
Yo tambien quiero saber esto, favor alguien que responda!!!!