Popular

Obten claves web y navega gratis Router keygen para Android

Error 403 Forbidden con phpmyadmin y WAMP Server

Realizar suma, resta y división con javascript

Conexión a una base de datos en mysql con JSON (Aplicación Android).

Bueno, volviendo a realizar publicaciones hoy retomaremos el tema de las aplicaciones en Android, algo que estuvimos platicando en un grupo de facebook vamos a tratar de simplificar y enfocarnos lo necesario y por poco tiempo les trataré de proporcionar el código ya si hay dudas me pueden contactar ya que no requiero de mucho tiempo para explicarlo totalmente. 

Primero que nada necesitamos realizar una clase que nos permitirá conectarnos por Post a un servicio PHP con el cuál traeremos los datos de MYSQL. 

Clase 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;

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;
         }
    }
}



Con está clase nos podremos conectar por medio de POST a nuestro servicio para traer la información por medio de JSON. Ahora una vez creada está clase les mostraré como hacer un pequeño Login. Primero que nada les pongo un diseño simple que crearemos y ahorita más adelante les muestro el código XML.

El código XML sería algo así: 

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical"
    android:background="@android:color/white"
     >

    <LinearLayout 
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        >
    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"/>
        
        
        <TextView 
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:text="Nombre de Usuario"
            android:textColor="#990000"
            />
        
        <EditText
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:hint="Nombre de Usuario"
            android:id="@+id/txtusuario"
            android:singleLine="true"
            />
        
        <TextView
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:text="Contraseña" 
            android:textColor="#990000"
            />
        
        <EditText
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:hint="Contraseña"
            android:id="@+id/txtpassword"
            android:password="true" 
            android:singleLine="true"
            />
        
        <LinearLayout 
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal"
            android:paddingRight="5sp"
            android:gravity="right">
        
        <Button android:paddingRight="10sp"
            android:layout_width="125sp"
            android:layout_height="40sp"
            android:text="Iniciar Sesión"
            android:id="@+id/conectar"
            android:background="#990000"
            android:textColor="@android:color/white"
            android:layout_gravity="right"
            />
        </LinearLayout>
        </LinearLayout>
</LinearLayout>

Ahora sí pasaremos a programar el lógin en java crearemos nuestra clase de java.
Aquí la clase que ejecutará nuestros componentes o controles. Al momento de dar click prefiero dejarles el código por falta de tiempo y si tienen dudas comenten...


public class SocialITAv10Activity extends Activity implements OnClickListener {
    EditText usuario, password; 
    Button conectar; 
    
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        conectar = (Button) findViewById(R.id.conectar); 
        
        usuario = (EditText) findViewById(R.id.txtusuario); 
        password = (EditText) findViewById(R.id.txtpassword);
        
        conectar.setOnClickListener(this);  
        
    }

    public void onClick(View arg0) {
        // TODO Auto-generated method stub
        switch (arg0.getId())
        {
        case R.id.conectar:
        
            if (networkAvailable())
            {
                if (usuario.getText().toString().equals("") || password.getText().toString().equals(""))
                {
                    Toast toast = Toast.makeText(this, "Verifica tus datos", Toast.LENGTH_LONG);
                    toast.show(); 
                }
                else 
                {
                
                //Toast toast = Toast.makeText(this, usuario.getText().toString(), Toast.LENGTH_SHORT); 
                //toast.show();
                    ArrayList parametros = new ArrayList();
                    parametros.add("Usuario");
                    parametros.add(usuario.getText().toString());
                    parametros.add("Password");
                    parametros.add(password.getText().toString());
                    parametros.add("basedat");
                    parametros.add("dsc");
                
                //Llamada al servidor web php
                try { 
                    Post post = new Post();
                    String server_ip ="http://192.168.1.70//";
                    
                    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(), "Conectando...", Toast.LENGTH_SHORT).show();
                            
                            parametros.clear();
                            parametros.add("Usuario");
                            parametros.add(usuario.getText().toString());
                            
                            datos = post.getServerData(parametros, server_ip+"Proyecto_socialITAAndroid/hacerLogin2.php");
                            json_data = datos.getJSONObject(0); 
                            numdevueltos=0; 
                            numdevueltos = json_data.getInt("id");
                            
                            if (numdevueltos > 0 )
                            {
                            
                            //Llamar intent a la nueva pantalla en este caso sera principal
                            //Intent es el medio para comunicar entre activitys,
                            //startActitivy empieza la actividad
                            Intent intent = new Intent("com.android.socialITA10.PRINCIPAL");
                            
                            //Capturar los datos que se van a ir por el Intent
                            //Creamos bundle: Bolsa para guardar todo
                            String usuario_name = usuario.getText().toString();
                            String id_usuario = json_data.getString("id");
                            
                            Bundle bolsa_datos = new Bundle();
                            bolsa_datos.putString("USUARIO_NO", usuario_name);
                            bolsa_datos.putString("ID_USUARIO", id_usuario);
                            bolsa_datos.putString("SERVER_IP", server_ip);
                            bolsa_datos.putString("USER_NAME", json_data.getString("name"));
                            intent.putExtras(bolsa_datos);
                            
                            startActivity(intent);
                            }
                        }
                    }
                    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();
                }
                    
                }
            }
            else
                Toast.makeText(getBaseContext(), "Error con la conexión a Internet. ", Toast.LENGTH_SHORT).show();
            break;
        }
        
        }
y Sólo faltaría crear el servicio php. algó así quedaría el servicio.

<?php
//login.php
$user = $_POST['Usuario'];
$pass = $_POST['Contrasena'];

$link = mysql_connect('localhost', 'root', '');
if (!$link) {
    die('No pudo conectar: ' . mysql_error());
}

mysql_select_db("fastfoodcompany");

$q=mysql_query("SELECT * FROM usuarios WHERE USER='{$user}' AND PASSWORD='{$pass}' ");
//$q=mysql_query("SELECT * FROM usuarios");

while($e=mysql_fetch_assoc($q))

              $output[]=$e;

      print(json_encode($output));

mysql_close($link);
?>

Cómo nota adicional podemos decir que la IP que tiene nuestra aplicación java es la ip del servidor que ejecutará el servicio para que nos regrese los datos por medio de JSON. esté es un ejemplo muy básico y sencillo.. 

Comentarios

Anónimo ha dicho que…
Hola, yo ejecutado ese codigo en un terminal fisico y no funciona, en el emulador de eclipse si funciona, pero cuando exporto el archivo apk, a un movil, me da error de conexión, gracias y un saludol.
TIntelligence ha dicho que…
@Jose Santiago SantiagoHola Santiago, ya vericaste que la ip esté correctamente ??? y que tu dispositivo tenga conexión ??? saludos...
Tendö ha dicho que…
en tu clase SocialITAv10Activity.java hay un metodo que se llama networkAvailable() que está dentro de un if. me marca error no sé por que? quien me ayuddaaaaa por favor :D
TIntelligence ha dicho que…
@TendöHola mira lo que pasa es que hay que darlo de alta en el archivo manifest pero lo que puedes hacer es omitirlo a lo que veo aún no está bien implementado no se porque e lo definí ahí. Saludos cualquier duda puedes contactarme directamente por google+, facebook o twitter, para platicar mas preciso el problema saludos gracias por tu comentario.
Unknown ha dicho que…
Disculpa Uziel mi consulta es la siguiente: el pedazo de código "servicio php" donde lo tengo que poner? Disculpa mi ignorancia soy nuevo en esto.
Unknown ha dicho que…
y tambien tengo problemas con el metodo networkAvailable() =/
TIntelligence ha dicho que…
El sevicio.php es un servicio web q puedes usar mediante wampserver el servicio servira para conectarnos a mysql y pasarle.los datos a la aplicacion. Solo yienes q crear el archivo. Php y poner tu ip + el nombre del archivo en el. Java

Rl otro metodo poedes omiyirlo aun no esta listo. :)
TIntelligence ha dicho que…
@jose
De cuál archivo te faltan las librerías ???
TIntelligence ha dicho que…
@josePues presiona Ctrol + Shift + O, en tu eclipse y te agrega las referencias de todos modos más tarde las publico pero creo que así lo puedes solucionar.
Lo de la base de datos y la tabla crea una base de datos y una tabla que tenga el campo {USER} y {PASSWORD} con eso solucionas y/o crea un select diferente a cualquier tabla que tu tengas, en MYSQL (PHPMYADMIN).
TIntelligence ha dicho que…
@joseMe gustaría que me explicarás un poco a cerca del error pero creo que no falta nada en el manifest esto lo hice hace mucho y no agregue nada raro porque es un ejemplo muy sencillo pero más tarde les subo un ejemplo completo básico con el código integrado...
TIntelligence ha dicho que…
@jose Muy bien, ánimo amigo ahorita mismo no lo puedo hacer porque estoy en mi trabajo pero en cuanto llegue a casa escribo y la postéo para que veas, entiendo también alguna vez estuve en batallando por la falta de información pero más tarde trataré de explicarlo lo mejor y más fácil posible...
TIntelligence ha dicho que…
@jose Ha muy bien muy interesante igual y si después de que te muestre el ejemplo sigues teniendo dudas cuenta con el equipo de ZROX para cualquier cosa... Y gracias por comentarnos tus dudas son muy importantes para nosotros
jose ha dicho que…
:/ no ps no encuentro otro tutorial mas entendible q este T_T y no me funciona arwwww
jose ha dicho que…
if (networkAvailable())
{
if ( et1.getText().toString().equals(""))
{
Toast toast = Toast.makeText(this, "Verifica tus datos", Toast.LENGTH_LONG);
toast.show();
}
else
{(networkAvailable()) el error sale hay que sera o.O
TIntelligence ha dicho que…
@joseAmigo ayer no alcance a términar el otro ejemplo que te comente, hoy seguramente si estaré subiendolo casi está listo, una disculpa por eso, esa parte de código puedes omitirla es porque nos falta una referencia en el Manifest pero puedes omitirla no es necesaria ya que aun presenta algunos erroes ese código no está completamente fiable... Saludos...
jose ha dicho que…
a ok probare sin eso a ver grax si lo espero con gran necesidad :(
TIntelligence ha dicho que…
@joseSi seguramente hoy lo tendré listo una disculpa pero se me complico términarlo ya que se prolongo mi salida de mi trabajo pero igual y hoy lo tengo listo en un rato más.
jose ha dicho que…
ok lo estoy esperando :( ntp
jose ha dicho que…
nada que consigo el error :( ayuda U_U
TIntelligence ha dicho que…
@jose
http://compuroo.blogspot.mx/2013/04/login-en-android-con-conexion-mysql.html
Unknown ha dicho que…
@UZIEL ESAU MERCADO PEREZ

Disculpa què se pretende aquí? int numdevueltos = json_data.getInt("cve_usuario");

Entradas populares de este blog

Error 403 Forbidden con phpmyadmin y WAMP Server

Número de filas afectadas por instrucción PL/SQL en Oracle [Utilidades].

Como truncar un número decimal en C# sin redondear.