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
Rl otro metodo poedes omiyirlo aun no esta listo. :)
De cuál archivo te faltan las librerías ???
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).
{
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
http://compuroo.blogspot.mx/2013/04/login-en-android-con-conexion-mysql.html
Disculpa què se pretende aquí? int numdevueltos = json_data.getInt("cve_usuario");