Los archivos de mysql se encuentra en la carpeta "cas" dentro del proyecto de github
Para verlo funcionando
http://basededatosremotas.meximas.com/cas/login.php
http://basededatosremotas.meximas.com/cas/register.php
Por favor no se abusen probando que es un server gratuito, si ocupan toda la banda ancha se cae
Antes recomiendo ver Base de datos remotas
Pueden acceder desde acá a HOSTINGER
Login.java
import java.util.ArrayList;
import java.util.List;
import org.apache.http.NameValuePair;
import org.apache.http.message.BasicNameValuePair;
import org.json.JSONException;
import org.json.JSONObject;
import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.os.AsyncTask;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
public class Login extends Activity implements OnClickListener {
private EditText user, pass;
private Button mSubmit, mRegister;
private ProgressDialog pDialog;
// Clase JSONParser
JSONParser jsonParser = new JSONParser();
// si trabajan de manera local "localhost" :
// En windows tienen que ir, run CMD > ipconfig
// buscar su IP
// y poner de la siguiente manera
// "http://xxx.xxx.x.x:1234/cas/login.php";
private static final String LOGIN_URL = "http://10.0.2.2:1234/cas/login.php";
// La respuesta del JSON es
private static final String TAG_SUCCESS = "success";
private static final String TAG_MESSAGE = "message";
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.login);
// setup input fields
user = (EditText) findViewById(R.id.username);
pass = (EditText) findViewById(R.id.password);
// setup buttons
mSubmit = (Button) findViewById(R.id.login);
mRegister = (Button) findViewById(R.id.register);
// register listeners
mSubmit.setOnClickListener(this);
mRegister.setOnClickListener(this);
}
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
switch (v.getId()) {
case R.id.login:
new AttemptLogin().execute();
break;
case R.id.register:
Intent i = new Intent(this, Register.class);
startActivity(i);
break;
default:
break;
}
}
class AttemptLogin extends AsyncTask<String, String, String> {
@Override
protected void onPreExecute() {
super.onPreExecute();
pDialog = new ProgressDialog(Login.this);
pDialog.setMessage("Attempting login...");
pDialog.setIndeterminate(false);
pDialog.setCancelable(true);
pDialog.show();
}
@Override
protected String doInBackground(String... args) {
int success;
String username = user.getText().toString();
String password = pass.getText().toString();
try {
// Building Parameters
List params = new ArrayList();
params.add(new BasicNameValuePair("username", username));
params.add(new BasicNameValuePair("password", password));
Log.d("request!", "starting");
// getting product details by making HTTP request
JSONObject json = jsonParser.makeHttpRequest(LOGIN_URL, "POST",
params);
// check your log for json response
Log.d("Login attempt", json.toString());
// json success tag
success = json.getInt(TAG_SUCCESS);
if (success == 1) {
Log.d("Login Successful!", json.toString());
// save user data
SharedPreferences sp = PreferenceManager
.getDefaultSharedPreferences(Login.this);
Editor edit = sp.edit();
edit.putString("username", username);
edit.commit();
Intent i = new Intent(Login.this, ReadComments.class);
finish();
startActivity(i);
return json.getString(TAG_MESSAGE);
} else {
Log.d("Login Failure!", json.getString(TAG_MESSAGE));
return json.getString(TAG_MESSAGE);
}
} catch (JSONException e) {
e.printStackTrace();
}
return null;
}
protected void onPostExecute(String file_url) {
// dismiss the dialog once product deleted
pDialog.dismiss();
if (file_url != null) {
Toast.makeText(Login.this, file_url, Toast.LENGTH_LONG).show();
}
}
}
}
Register.java
import java.util.ArrayList;
import java.util.List;
import org.apache.http.NameValuePair;
import org.apache.http.message.BasicNameValuePair;
import org.json.JSONException;
import org.json.JSONObject;
import android.app.Activity;
import android.app.ProgressDialog;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
public class Register extends Activity implements OnClickListener{
private EditText user, pass;
private Button mRegister;
// Progress Dialog
private ProgressDialog pDialog;
// JSON parser class
JSONParser jsonParser = new JSONParser();
//si lo trabajan de manera local en xxx.xxx.x.x va su ip local
// private static final String REGISTER_URL = "http://xxx.xxx.x.x:1234/cas/register.php";
//testing on Emulator:
private static final String REGISTER_URL = "http://10.0.2.2:1234/cas/register.php";
//ids
private static final String TAG_SUCCESS = "success";
private static final String TAG_MESSAGE = "message";
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.register);
user = (EditText)findViewById(R.id.username);
pass = (EditText)findViewById(R.id.password);
mRegister = (Button)findViewById(R.id.register);
mRegister.setOnClickListener(this);
}
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
new CreateUser().execute();
}
class CreateUser extends AsyncTask<String, String, String> {
@Override
protected void onPreExecute() {
super.onPreExecute();
pDialog = new ProgressDialog(Register.this);
pDialog.setMessage("Creating User...");
pDialog.setIndeterminate(false);
pDialog.setCancelable(true);
pDialog.show();
}
@Override
protected String doInBackground(String... args) {
// TODO Auto-generated method stub
// Check for success tag
int success;
String username = user.getText().toString();
String password = pass.getText().toString();
try {
// Building Parameters
List params = new ArrayList();
params.add(new BasicNameValuePair("username", username));
params.add(new BasicNameValuePair("password", password));
Log.d("request!", "starting");
//Posting user data to script
JSONObject json = jsonParser.makeHttpRequest(
REGISTER_URL, "POST", params);
// full json response
Log.d("Registering attempt", json.toString());
// json success element
success = json.getInt(TAG_SUCCESS);
if (success == 1) {
Log.d("User Created!", json.toString());
finish();
return json.getString(TAG_MESSAGE);
}else{
Log.d("Registering Failure!", json.getString(TAG_MESSAGE));
return json.getString(TAG_MESSAGE);
}
} catch (JSONException e) {
e.printStackTrace();
}
return null;
}
protected void onPostExecute(String file_url) {
// dismiss the dialog once product deleted
pDialog.dismiss();
if (file_url != null){
Toast.makeText(Register.this, file_url, Toast.LENGTH_LONG).show();
}
}
}
}
JSONParser.java
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.util.List;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.utils.URLEncodedUtils;
import org.apache.http.impl.client.DefaultHttpClient;
import org.json.JSONException;
import org.json.JSONObject;
import android.util.Log;
public class JSONParser {
static InputStream is = null;
static JSONObject jObj = null;
static String json = "";
// constructor
public JSONParser() {
}
public JSONObject getJSONFromUrl(final String url) {
// Making HTTP request
try {
// Construct the client and the HTTP request.
DefaultHttpClient httpClient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost(url);
// Execute the POST request and store the response locally.
HttpResponse httpResponse = httpClient.execute(httpPost);
// Extract data from the response.
HttpEntity httpEntity = httpResponse.getEntity();
// Open an inputStream with the data content.
is = httpEntity.getContent();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
try {
// Create a BufferedReader to parse through the inputStream.
BufferedReader reader = new BufferedReader(new InputStreamReader(
is, "iso-8859-1"), 8);
// Declare a string builder to help with the parsing.
StringBuilder sb = new StringBuilder();
// Declare a string to store the JSON object data in string form.
String line = null;
// Build the string until null.
while ((line = reader.readLine()) != null) {
sb.append(line + "\n");
}
// Close the input stream.
is.close();
// Convert the string builder data to an actual string.
json = sb.toString();
} catch (Exception e) {
Log.e("Buffer Error", "Error converting result " + e.toString());
}
// Try to parse the string to a JSON object
try {
jObj = new JSONObject(json);
} catch (JSONException e) {
Log.e("JSON Parser", "Error parsing data " + e.toString());
}
// Return the JSON Object.
return jObj;
}
public JSONObject makeHttpRequest(String url, String method,
List params) {
// Haciendo la Petición HTTP
try {
// check for request method
if(method == "POST"){
// request method is POST
// defaultHttpClient
DefaultHttpClient httpClient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost(url);
httpPost.setEntity(new UrlEncodedFormEntity(params));
HttpResponse httpResponse = httpClient.execute(httpPost);
HttpEntity httpEntity = httpResponse.getEntity();
is = httpEntity.getContent();
}else if(method == "GET"){
// request method is GET
DefaultHttpClient httpClient = new DefaultHttpClient();
String paramString = URLEncodedUtils.format(params, "utf-8");
url += "?" + paramString;
HttpGet httpGet = new HttpGet(url);
HttpResponse httpResponse = httpClient.execute(httpGet);
HttpEntity httpEntity = httpResponse.getEntity();
is = httpEntity.getContent();
}
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
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();
json = sb.toString();
} catch (Exception e) {
Log.e("Buffer Error", "Error converting result " + e.toString());
}
// try parse the string to a JSON object
try {
jObj = new JSONObject(json);
} catch (JSONException e) {
Log.e("JSON Parser", "Error parsing data " + e.toString());
}
// return JSON String
return jObj;
}
}
login.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<Button
android:id="@+id/register"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/login"
android:layout_alignParentBottom="true"
android:layout_alignRight="@+id/login"
android:layout_marginBottom="25dp"
android:text="Register" />
<Button
android:id="@+id/login"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_above="@+id/register"
android:layout_alignLeft="@+id/password"
android:layout_alignRight="@+id/password"
android:text="Login" />
<EditText
android:id="@+id/password"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_above="@+id/login"
android:layout_centerHorizontal="true"
android:ems="10"
android:inputType="textPassword" >
<requestFocus />
</EditText>
<TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:layout_marginTop="17dp"
android:gravity="center"
android:text="Base de datos remota tutorial"
android:textAppearance="?android:attr/textAppearanceLarge"
android:textStyle="bold" />
<TextView
android:id="@+id/TextView01"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_above="@+id/password"
android:layout_alignLeft="@+id/password"
android:layout_marginLeft="22dp"
android:text="Password" />
<EditText
android:id="@+id/username"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_above="@+id/TextView01"
android:layout_centerHorizontal="true"
android:ems="10" />
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignRight="@+id/TextView01"
android:layout_centerVertical="true"
android:text="Username" />
</RelativeLayout>
register.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/password"
android:layout_centerVertical="true"
android:text="Username" />
<EditText
android:id="@+id/username"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/textView1"
android:layout_below="@+id/textView1"
android:ems="10" />
<TextView
android:id="@+id/TextView01"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/username"
android:layout_below="@+id/username"
android:text="Password" />
<TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:layout_marginTop="16dp"
android:gravity="center"
android:text="Base de datos remota tutorial"
android:textAppearance="?android:attr/textAppearanceLarge"
android:textStyle="bold" />
<EditText
android:id="@+id/password"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/TextView01"
android:layout_centerHorizontal="true"
android:ems="10"
android:inputType="textPassword" />
<Button
android:id="@+id/register"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignRight="@+id/password"
android:layout_below="@+id/password"
android:text="Register" />
</RelativeLayout>
strings.xml
<resources>
<!-- string ids for registration.xml -->
<string name="app_name">Remote Databases</string>
<string name="username_textview">Username:</string>
<string name="password_textview">Password:</string>
<string name="submit">Submit</string>
</resources>
AndroidManifest.xml (agregar)
<uses-permission android:name="android.permission.INTERNET"/>
MYSQL
config.inc.php
<?php
//los atributos de abajo son los que tenemos que modificar
$username = "u292883372_rami";
$password = "cursoandroid";
$host = "localhost";
$dbname = "u292883372_bdrem";
// Para saber más de que se trata UTF-8 visita http://en.wikipedia.org/wiki/UTF-8
$options = array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8');
try
{
$db = new PDO("mysql:host={$host};dbname={$dbname};charset=utf8", $username, $password, $options);
}
catch(PDOException $ex)
{
die("Failed to connect to the database: " . $ex->getMessage());
}
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$db->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
if(function_exists('get_magic_quotes_gpc') && get_magic_quotes_gpc())
{
function undo_magic_quotes_gpc(&$array)
{
foreach($array as &$value)
{
if(is_array($value))
{
undo_magic_quotes_gpc($value);
}
else
{
$value = stripslashes($value);
}
}
}
undo_magic_quotes_gpc($_POST);
undo_magic_quotes_gpc($_GET);
undo_magic_quotes_gpc($_COOKIE);
}
header('Content-Type: text/html; charset=utf-8');
session_start();
?>
login.php
<?php //carga y se conecta a la base de datos require("config.inc.php"); if (!empty($_POST)) { //obteneos los usuarios respecto a la usuario que llega por parametro $query = " SELECT id, username, password FROM users WHERE username = :username "; $query_params = array( ':username' => $_POST['username'] ); try { $stmt = $db->prepare($query); $result = $stmt->execute($query_params); } catch (PDOException $ex) { //para testear pueden utilizar lo de abajo //die("la consulta murio " . $ex->getMessage()); $response["success"] = 0; $response["message"] = "Problema con la base de datos, vuelve a intetarlo"; die(json_encode($response)); } //la variable a continuación nos permitirará determinar //si es o no la información correcta //la inicializamos en "false" $validated_info = false; //bamos a buscar a todas las filas $row = $stmt->fetch(); if ($row) { //si el password viene encryptado debemos desencryptarlo acá // ++ DESCRYPTAR ++// //encaso que no lo este, solo comparamos como acontinuación if ($_POST['password'] === $row['password']) { $login_ok = true; } } // así como nos logueamos en facebook, twitter etc! // Otherwise, we display a login failed message and show the login form again if ($login_ok) { $response["success"] = 1; $response["message"] = "Login correcto!"; die(json_encode($response)); } else { $response["success"] = 0; $response["message"] = "Login INCORRECTO"; die(json_encode($response)); } } else { ?> <h1>Login</h1> <form action="login.php" method="post"> Username:<br /> <input type="text" name="username" placeholder="username" /> <br /><br /> Password:<br /> <input type="password" name="password" placeholder="password" value="" /> <br /><br /> <input type="submit" value="Login" /> </form> <a href="register.php">Register</a> <?php } ?>
<?php /* siempre tener en cuenta "config.inc.php" */ require("config.inc.php"); //if posted data is not empty if (!empty($_POST)) { //preguntamos si el ussuario y la contraseña esta vacia //sino muere if (empty($_POST['username']) || empty($_POST['password'])) { // creamos el JSON $response["success"] = 0; $response["message"] = "Por favor entre el usuairo y el password"; die(json_encode($response)); } //si no hemos muerto (die), nos fijamos si exist en la base de datos $query = " SELECT 1 FROM users WHERE username = :user"; //acutalizamos el :user $query_params = array( ':user' => $_POST['username'] ); //ejecutamos la consulta try { // estas son las dos consultas que se van a hacer en la bse de datos $stmt = $db->prepare($query); $result = $stmt->execute($query_params); } catch (PDOException $ex) { // solo para testing //die("Failed to run query: " . $ex->getMessage()); $response["success"] = 0; $response["message"] = "Database Error1. Please Try Again!"; die(json_encode($response)); } //buscamos la información //como sabemos que el usuario ya existe lo matamos $row = $stmt->fetch(); if ($row) { // Solo para testing //die("This username is already in use"); $response["success"] = 0; $response["message"] = "Lo siento el usuario ya existe"; die(json_encode($response)); } //Si llegamos a este punto, es porque el usuario no existe //y lo insertamos (agregamos) $query = "INSERT INTO users ( username, password ) VALUES ( :user, :pass ) "; //actualizamos los token $query_params = array( ':user' => $_POST['username'], ':pass' => $_POST['password'] ); //ejecutamos la query y creamos el usuario try { $stmt = $db->prepare($query); $result = $stmt->execute($query_params); } catch (PDOException $ex) { // solo para testing //die("Failed to run query: " . $ex->getMessage()); $response["success"] = 0; $response["message"] = "Error base de datos2. Porfavor vuelve a intentarlo"; die(json_encode($response)); } //si hemos llegado a este punto //es que el usuario se agregado satisfactoriamente $response["success"] = 1; $response["message"] = "El usuario se ha agregado correctamente"; echo json_encode($response); //para cas php tu puedes simpelmente redireccionar o morir //header("Location: login.php"); //die("Redirecting to login.php"); } else { ?> <h1>Register</h1> <form action="register.php" method="post"> Username:<br /> <input type="text" name="username" value="" /> <br /><br /> Password:<br /> <input type="password" name="password" value="" /> <br /><br /> <input type="submit" value="Register New User" /> </form> <?php } ?>
hola ramiro primero que nada agradecerte por el gran aporte me funciona todo solo que al salir de la aplicación y entrar de nuevo tengo que logiarme como puedo hacer para que al salir, la sesion este todavia abierta
ResponderEliminarsaludos
Yo lo intentaría por el lado del SharePreference http://cursoandroidstudio.blogspot.com.ar/2014/07/sharepreferences.html
EliminarO mejor aún dejar la app abierta getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
Eliminargracias por la respuesta, eso donde iria disculpa por lo perdido es que soy nuevo en esto de android
Eliminaragradeceria mucho tu ayuda
danilo como lo lograste hacer?
Eliminaren en onresume deberias guardar ahi un dato
Eliminar@Override
protected void onResume() {
super.onResume();
String valor = preferencias.getString(getString(R.string.est_Telefono), "");
if(!valor.equals("")){
Intent Intent =new Intent(Registrar_Usuario.this,Validacion.class);
startActivity(Intent);
this.finish();
}
}
Hola, excelente tutorial, solo que de forma local no me funciono, pero si al usar un host. saludos.
ResponderEliminarA mi tampoco me funciona local, sino mal recuerdo era por la versión de php, pero en otras pc si me funciona
Eliminaryo estoy usando wamp y solo se soluciono con poner el puerto en la ip y habilitar la opcion poner "put online"
Eliminardonde le pones put online
EliminarPerdon por el off-topic pero soy novato en android studio y estaba acostumbrado a eclipse. Tengo una duda, en eclipse los errores aparecían subrayados en rojo y aparecían posibles soluciones al pasar el ratón sobre el. A mi me resultaba muy útil, sobre todo para los import. ¿No se puede hacer lo mismo en Android Studio?
ResponderEliminarEn el LogCat te salen las sugerencias y errores, pero si te vas a pasar a Android Studio es una muy buena decisión
EliminarBuenas Ramiro, primero de todo gran blog que me ayuda mucho con mis apps en este nuevo mundo para mi, comentarte que desde aqui http://cursoandroidstudio.blogspot.com.ar/p/inicio.html al ir a Login (queriendo ir aqui http://cursoandroidstudio.blogspot.com.ar/2015/01/base-de-datos-remotas-login.html) te lleva a Youtube y desde allí viendo la descripcion del video puedes llegar a aquí. Te lo comento porque el resto de apartados en tu pagina de Inicio te llevan a tu blog y desde alli tienes los videos. Por si ha sido un error tonto poder subsanarlo, sino pues lo siento solo queria ayudar :P
ResponderEliminarSaludos y sigue así!
Hola Gonzalo. Si tenes razón. Ahora lo arreglo, gracias.
EliminarEn que carpeta pongo esos archivos .php?
ResponderEliminarSaludos.
dentro de la carpeta "public" lo pones donde vos quieras.. yo particularmente pongo "ramiroconnect" o "miappconnect"
EliminarHola ..Excelentes vídeos ..de verdad son excelentes, una pregunta .....es posible leer un archivo .txt que se encuentra en un ordenador desde un dispositivo android ? o crear desde java un archivo txt dentro de la memoria del dispositivo ? y si se puede me puede dar una pista de como
ResponderEliminarHola, excelente vídeo, me gustaría preguntar: si el webservice tengo esta respuesta
ResponderEliminarif (!is_null($new_user)) {
$this->response(array("success" => "usuario registrado"),200);
} else {
$this->response(array("error" => "Hay un error"), 404);
}
como obtengo en el formulario registro, el statusLine.getStatusCode();
Muchas gracias
hola Ramiro , en primer lugar felicitar por el gran trabajo, me iba a hacer una aplicación que el registro se produce sólo a distancia, es decir, no tienen el registro en la propia aplicación, debería ignorar la parte del registro o tiene algo debería estar haciendo? Os doy las gracias
ResponderEliminarClaro, en este caso el registro es "a distancia", no es local
EliminarComo es el facebook, te podes conectar en esta computadora, o desde la compu de tu amigo sin problema.
Más técnico se podría decir, te registrar de forma remota en la nuve, no local. Anda descubriendo esas palabras claves, remoto = distancia, te digo porque cuando googles es importante usar las palabras correctas para encontrar lo que estas buscando
Hola ramiro, queria decirte que puse todo el codigo como vos pero no me sale. Lo ejecuto y se queda cargando y luego se cierra cual sera mi problema
ResponderEliminara mi me pasa igual, no se que mas puedo hacer. Copie el codigo igual, la bbdd, todo todo. Por favor ayuda.
EliminarGracias capo, necesito hacer un proyecto en el laburo para conectarme a varias BBDD y me viene al pelo. De lo mejorcito que encontré, explicas muy bien! Un saludo
ResponderEliminarGracias, me alegro que te guste
Eliminarmmm puedes montar en GitHub el script de la base de datos? Gracias de antemano...
ResponderEliminarSaludo,
ResponderEliminarAmigo te quiero felicitar por tus vídeos y documentación que nos suministrar para quienes queremos empezar en el tema.
Te cuento lo que sucede, cuando pego el código del archivo JSONParser.java:
algunas lineas se tachan con una linea DefaultHttpClient httpClient = new DefaultHttpClient(); con el siguiente mensaje:
This inspection reports where deprecated code is used in the specified inspection scope.
Hola. Si eso quiere decir que funciona, pero que tengas en cuenta que en algun momento se va a dejar de funcionar. Por favor, trata de reemplazar por otra cosa..
EliminarEs algo así lo quiere decir el "deprecated"
Una duda como mando a cerrar la sesion ? ya que si entro a la primera, despues me salgo de la aplicacion y vuelvo a entrar a la app y me logeo pero ahora dado un usuario incorrecto entra de todos modos
ResponderEliminardebemos adentrarnos mas en seguridad, podriamos tener este archivo que recoge el formulario....php
Eliminar//vemos si el usuario y contraseña es valido
$var1=$_POST['usuario'];
$var2=$_POST['pass'];
if(strcmp($var1,"") == 0 && strcmp($var2,"") == 0)
{
header("Location: index.php?errorusuario=no");
}else
if(strcmp($var1,"xxxx") == 0 && strcmp($var2,"xxx") == 0)
{
//usuario y contraseña validos
//defino una sesion y guardo datos
session_start();
$_SESSION['autenticado']="SI";
header("Location: index2.php");
}else{
//si no existe le mando otra vez a la portada
header("Location: index.php?errorusuario=si");
}
y este que seria el de seguridad....php
//inicio de sesion
session_start();
//comprueba que el usuario esta autentificado
if($_SESSION['autenticado']!="SI"){
//si no existe, envio a la pagina de autentificacion
header("Location: index.php");
//ademas salgo de este script
exit();
}
este lo deberiamos de incluir en todos los archivos que no deberia verlos el que no esta logueado.. para salir deberiamos tener un boton que llame a este ultimo.... php
session_start();
session_destroy();
¿Cómo podría hacer una inserción normal de un dato a una base de datos tipo MYSQL??
ResponderEliminarHola Ramiro, primeramente te felicito por los aportes, espero me puedas despejar la siguiente duda, eh creado un Base de Datos ya está funcionando bien en WEB, pero en la Aplicación, cuando la ejecuto y hago login, se cierra la aplicación aún que no escriba nada, también, cuando hago el registro, sube la información al servidor, pero también forza el cierre de la aplicación, me gustaría saber si tiene algo que ver que mi dispositivo sea android 5.0.2 o si debe ser inferior a esta versión, Excelente trabajo, esperando más tutoriales. Saludos
ResponderEliminarUna duda la Aplicación de android, cuando la ejecuto y hago login ingreso los datos y al pulsar el boton de login , se cierra la aplicación , también, cuando hago el registro, sube la información al servidor, pero también forza el cierre de la aplicación, me gustaría saber a que se debe ...Gracias Saludos
ResponderEliminarMe paso lo mismo y escribí linea por linea el código para intentar comprenderlo, eso si deberás investigar un poco, sobre los objetos JSON, revisa bastante, tus ID's para, la parte de la interfaz que estén bien escritas, a mi me funciono eso, lo hice por que agregue más campos a mi tabla. Saludos.
EliminarTengo problemas con los archivos al subirlos al host, pruebo abrir el login desde el navegador, como en el video, pero me sale un mensaje: Failed to connect to the database: SQLSTATE[HY000] [2002] Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2 "No such file or directory"), por consiguiente ya en la aplicacion android se cierra
ResponderEliminarMe da el siguiente error: Error parsing data org.json.JSONException: Value  of type java.lang.String cannot be converted to JSONObject
ResponderEliminarSaben donde esta el error?
Gracias
tengo el mismo error de conversion, alguien que pueda ayudarnos porfa, soy nuevo en android
ResponderEliminarHola Ramiro, antes que nada quisiera agradecerte por compartir este video tutorial, tengo una consulta, como puedo realizar un web service para iniciar sesion sin necesidad de crear usuarios sino que invoque dichos usuarios desde el servidor de la empresa (equis) "x" ?
ResponderEliminarEste comentario ha sido eliminado por el autor.
ResponderEliminarHola buenas tardes estoy trabajando con estas clases que la verdad están muy bien , trabajo con un servidor remoto y al intentar insertar un usuario en mi base de datos me sale el siguiente error:
ResponderEliminar"04-26 16:47:26.201 2303-2303/com.example.usuario.viajemas E/WindowManager﹕ android.view.WindowLeaked: Activity com.example.usuario.viajemas.Actividadmicuenta has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView{29ceb195 V.E..... R......D 0,0-684,232} that was originally added here"
Buscando por internet dicen que hay que cerrar todos los progress antes de que se acabe un activity pero no lo consigo resolver.
Me podrian ayudar??
pon tu codigo
EliminarAmigo hola a mi solo me marca error al mandar los datos al servidor, pero creo es solo desde android porque si lo hago en mi servidor con el archivo en php si me abre las interfaces pero del android me marca error en la linea 85 y 114
ResponderEliminarLinea 85: class AttemptLogin extends AsyncTask {
Lineaa 114: Log.d("Login attempt", json.toString());
Verifica q tu clase este así
Eliminarclass AttemptLogin extends AsyncTask < String, String, String >
Tengo el mismo problema que Fire Mix y tambien tengo escrito tal cual:
Eliminarclass AttemptLogin extends AsyncTask < String, String, String >
Creo que el error se debe a que no tiene acceso a la URLLogin ya que me pone que me lleva a la ruta localhost/cas
pero no llega o no accede a la ruta completa (localhost/cas/login.php)... Por lo tanto me dice que el objeto json es null, cuando no puede ser null porque comprobe con un system.out.print que me imprime los parametros.
Toda ayuda será bien recibida. Gracias a todos.
Hola Ramiro, muy buena tu página, nos das un excelente aporte con cada video!!!
ResponderEliminarFíjate que en estos momentos estamos haciendo una app para odenar comidas en restaurantes, y tenemos un problema en determinado punto del sistema, cuando hacemos un registro del cliente y presionamos botón "Continuar" para que pueda ver el menú y selecciones sus platillos.
El registro lo hace bien y todo en la BD de MySQL, el problema está en que no redirecciona a la siguiente Layout que debería presentarle al usuario de los menús, crees que nos podrías ayudar amigo, te estaremos sumamente agradecidos!!!
Aca mi correo = xerver-ayala@hotmail.com
mi FB = https://www.facebook.com/XerverAyala
Hola Ramiro, sabes como subir imagenes a una base de datos remota como hostinger y luego mostrarlas???
ResponderEliminarHola Ramiro, un saludo desde Colombia.
ResponderEliminarQuiero agradecerte por esa labor tan grande y desinteresada que realizas, lo poco que sé, lo he aprendido bien y gracias a ti.
Quería solicitar tu colaboración con un inconveniente, he creado la base de datos y los respectivos archivos php para la conexión, pero cuando voy a hacer la prueba desde el navegador me genera el siguiente error: Failed to connect to the database: SQLSTATE[28000] [1045] Access denied for user 'u683380231_root'@'localhost' (using password: YES).
He intentado cambiando la contraseña de la base de datos, he validado la información de login pero no me deja realizar la conexión.
De antemano, gracias
K tal Ramiro la verda son super geniales los tutos k realizaste.. me lo estoy pasando viendo uno por uno, ya k soy nuevo en android, mas me gustaria k realices tutos de intro de android con node js y socket io. Gracias.., saludos!!!!
ResponderEliminarBuenas,
ResponderEliminarSoy nuevo en el mundo android, bastante nuevo de hecho... y tus tutoriales me están sirviendo de guía, muchas gracias!
El caso es que estoy liado en hacer un login a mi app, y siguiendo tu proyecto me aparecen métodos obsoletos, al igual que le pasaba a otro lector, las cuales según dices, seguirán funcionando durante sabe dios cuanto tiempo... sabes si hay otras clases y métodos que sustituyan a éstos para evitar la obsolescencia? o hoy por hoy es lo único con lo que podemos trabajar para ello?
De antemano muchas gracias!!!
Hola capo. Mira te cuento.
Eliminar1- Si tenes tu app funcionando subila con el deprecated o como la tengas. Un amigo muy sabio me dijo, el primero que la hace gana. Por ej un amigo hizo la app de tyc sport no official y ganaba mucha plata hasta que tyc sport hizo realmente la oficial, pero mientras tanto el hizo mucho dinero.
2- Cuando llegue el momento donde esas clases queden obsoletas, ahí tenes que evaluar si realmente vale el esfuerzo para poder mejorarla/editarla/mantenerlas, porque muchas veces no lo son. Por ej mi primera app se llamaba "calculadora vilma" estuve 3 meses haciendola, tenía 24 (veinticuatro) mejoras, pero 1 año tuvo 50 descarga. La verdad que muy pobre!. Y cuando me paso algo parecido, la elimine!. La relación esfuerzo-ganancia no es proporcional.
En fin, subila como la tengas, y cuando llegue el momento de arreglarla, se ve!.
Espero que te haya servidos Juan Manuel. Saludos.
me aparece el ActionBarActivity en raya como instalo la libreria v7
ResponderEliminarHola. Me acabo de instalar android studio y al abrir tu proyecto y pulsar sobre Design me sale el siguiente error:
ResponderEliminarRendering Problems
The following classes could not be found:
- android.support.v7.internal.widget.ActionBarOverlayLayout (Fix Build Path, Edit XML, Create Class)
Además la carpeta .grandle sale en roja. Me puedes decir como solucionarlo? Muchas gracias!
Hola ... buen tutorial. Solo me ha presentado un problema al igual que otras personas, realiza la insercion pero cierra la aplicacion y es igual con el login.
ResponderEliminarEspero puedas ayudarme.
Buenas Gran ramiro , muy Buen tutorial como siempre :D
ResponderEliminarMan quisiera saber como puedo hacer un post en la base de datos con un cimple click de un boton, sin depender de campos de escritura, EJ: Presiona boton 1--> escribe una "A" en la columna X de la tabla Y de la base de datos
Buen tutorial gracias
ResponderEliminarsolo quiero que alguien me enseñe a insertar datos desde la aplicacion android, por favor alguien
hola ramiro excelente tutorial solo con una duda cuando el telefono no esta conectado a internet lanza el mensaje que se ha cerrado inesperadamente, como se podría solucionar que nos mandara a los ajustes de wifi y así evitar el cierre inesperado, saludos.
ResponderEliminarpor favor quisiera saber como puedo pedir desde mysql una imagen y mostrar en android en un xml, el problema que tengo es que los comandos DefaultHttpClient httpClient = new DefaultHttpClient();
ResponderEliminarHttpPost httpPost = new HttpPost(url);
httpPost.setEntity(new UrlEncodedFormEntity(params));
HttpResponse httpResponse = httpClient.execute(httpPost);
HttpEntity httpEntity = httpResponse.getEntity();
is = httpEntity.getContent();
son obsoletos para la version que tengo de android 1.2 me pudieran ayudar gracias dejo mi correo si saben como cristianbasto04@hotmail.com
Hola Ramiro buen Turorial amigos me estan ayudando mucho, la pregunta es la siguiente un poco larga no tanto jeje, Bueno resulta que yo estoy trabajo en mi servidor local en WAMSERVER 2.5 he creado en phpmyadmin una base de datos llamada usuario y una tabla usuarios entonces dentro de mi carpita wam server en la carpeta WWW puse los archivos phps login,register,config cambie las siguientes cosas en config.php solo cambie esta parte:
ResponderEliminar/los atributos de abajo son los que tenemos que modificar
$username = "root"; mi usuario del servidor
$password = "root"; mi contraseña del servidor
$host = "localhost";
$dbname = "usuario"; no usuarios(usuarios con con "s" es mi tabla
el Login modifique esto
$_POST['username']
);
en registro solo modifique el
//si no hemos muerto (die), nos fijamos si exist en la base de datos
$query = " SELECT 1 FROM usuarios WHERE username = :user";
ahora en el java solo puse esto en el Login
private static final String LOGIN_URL = "http://10.0.2.2/cas/login.php";
en el register
private static final String REGISTER_URL = "http://10.0.2.2/cas/register.php";
entonces al momento de REGISTRAR me registra cualquier usuario registrado dentro de mi base datos puede ingresar pero al momento de ingresar un usuario que no esta en mi base datos la aplicación se detienen Unfortunately aapSystema(nonbre el proyecto) has stopped muchas amigos un abrazo cuidate
Ramiro ahora Para Eliminar Los registros de una BD remota desde Android Studio también tienes un vídeo de eso??? saludos amigos
ResponderEliminarhopla que tal este yo lo estoy haciendo pero en el readComments no puedo poner la extends de actionBarActivity no se por que espero tu respuesta gracias :)
ResponderEliminarhola Ramiro, primero q todo, excelente trabajo bro. tengo una consulta, q agradezco tu respuesta. si estoy en la activity de login. y al hacer login quiero pasar a la siguiente activity el correo y también el nombre, como lo hago? el correo es fácil, por que lo capturo del textEdit, pero no logro hacer la consulta para traerme el nombre. gracias de antemano por tu ayuda!
ResponderEliminarpor si alguien mas tiene este problema, les comento que es muy fácil la solución, nadie me resolvió el problema, pero yo les aportare. solo en el php también mando a traer los demás datos. y luego escojo el nombre que me retorna en message, que seria el nombre, y se envía a la siguiente actividad con un putExtra o lo guardan en savepreferences para acceder desde cualquier activity o fragment.
EliminarAmigo ayúdame con este error a la hora de visualizar los archivos php.
ResponderEliminarLost connection to MySQL server at 'reading initial communication packet', system error: 95
Este comentario ha sido eliminado por el autor.
ResponderEliminarBom dia, o meu aplicativo está dando o seguinte erro http://caixapretadasaude.org.br/aplicativo/erro.PNG, http://caixapretadasaude.org.br/aplicativo/erro2.PNG alguém pode me ajudar?
ResponderEliminarhola de verdad muchas gracias por tantos conocimientos que nos compartes estoy muy agradecido amigo saludos desde mexico... quisiera hacer una aplicacion android aqui en android studio para consultas de base de datos en mysql
ResponderEliminaramigo mio, ramiro, gran trabajo, y espero me respondas, que a ti últimamente es un desafió conseguirte jejejee. quiero implementar una listviwe en la cula me traiga todas las empresas de la base de datos con sus columnas asi como en un anterior tutorial tuyo, pero que hay que modificar en el webservice para q funcione con el nuevo método q usas de config.inc.php de antemano, muchas gracias
ResponderEliminarTe felicito viejo Ramiro! buena por esa, no sabes cuanto me va a servir este tutorial. Dios y la Virgen te bendigan mucho.
ResponderEliminarajajaj, que bueno te haya servido
EliminarRamiro, que opinas de implementar este método.:
Eliminarhttp://www.hermosaprogramacion.com/2015/05/crear-un-webservice-para-android-con-mysql-php-y-json/
que esta precioso el ejemplo, opino que si deberías hacerlo y yo también. Lo voy a agregar a sitios de interés. Gracias por aportar.
Eliminarsi, ando implementandolo, pero estoy medio loco con el inicio de sesión, y que no me muestra los errores cuando no hay Internet o cosas así, creo q hay que implementar esas lineas en el try, quizá podrías echarle el ojo y guiarme un poco :)
Eliminarya lo solucione, muchas gracias, si alguien posee algun problema, no dude en comentarlo.
EliminarQue era?
Eliminarexcelente tuto ramiro colaborame con un codigo para registrar en una base de datos una id, nombre,telefono gracias
ResponderEliminarHola ramiro antes que nada un excelente aporte solo tengo un error en la parte del Login y en el de Register ,en la linea donde esta el
ResponderEliminarString username= user.getText().ToString();
String username= user.getText().ToString();
me marca el error en el user.getText() ,dice que la linea debe tener o debe ser llamda desde un UI Tread algo asi,como puedo solucionar ese error?
tienes que cambiarlas por un arreglo
EliminarString username = args[0];
String password = args[1];
y en onClick
declara ahora si lo siguiente
String username = user.getText().toString();
String password = pass.getText().toString();
Hola Ramiro.
ResponderEliminarAl subir los ficheros a hostinger y abrirlos no se conecta y me sale este error por pantalla:
Failed to connect to the database: SQLSTATE[HY000] [2002] Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2 "No such file or directory")
Como puedo arreglarlo?
mismo error
ResponderEliminarFailed to connect to the database: SQLSTATE[HY000] [2002] Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2 "No such file or directory"
me produce el mismo error en hostinguer
ResponderEliminarFailed to connect to the database: SQLSTATE[HY000] [2002] Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2 "No such file or directory")
Buenas Ramiro, me da error cuando voy a insertar o loguear un usuario cuando trabajo en localhost y como dice un comentario de arriba, yo también tengo problemas con esto me sale la linea en rojo en:
ResponderEliminarString username = user.getText().toString();
String password = pass.getText().toString();
me marca el error en el user.getText() ,dice que la linea debe tener o debe ser llamada desde un UI Tread algo asi,como puedo solucionar ese error?
Este comentario ha sido eliminado por el autor.
Eliminarya lo puse arriba como se resuelve
EliminarY en el log me sale esto que no se que significa:
ResponderEliminar09-25 18:19:05.102 24013-24013/com.ramiromadraiga.loginbdremote E/WindowManager﹕ android.view.WindowLeaked: Activity com.ramiromadraiga.loginbdremote.Register has leaked window com.android.internal.policy.PhoneWindow$DecorView{ab4741e V.E...... R......D 0,0-1026,348} that was originally added here
at android.view.ViewRootImpl.(ViewRootImpl.java:368)
at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:299)
at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:85)
at android.app.Dialog.show(Dialog.java:319)
at com.ramiromadraiga.loginbdremote.Register$CreateUser.onPreExecute(Register.java:73)
at android.os.AsyncTask.executeOnExecutor(AsyncTask.java:604)
at android.os.AsyncTask.execute(AsyncTask.java:551)
at com.ramiromadraiga.loginbdremote.Register.onClick(Register.java:60)
at android.view.View.performClick(View.java:5198)
at android.view.View$PerformClick.run(View.java:21147)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5417)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
muchas gracias por el material muy util , pero me da error en las siguientes lineas
ResponderEliminarString username = user.getText().toString();
String password = pass.getText().toString();
Method getText() must be called from the UI Thread
debido a eso no compara los valores y devuelve null , por lo que se cae el programa creo yo ,
cualquier ayuda la agradeceria mucho
saludos
Hola! espero que esto les ayude de como yo lo solucione primero lo que ise fue declara un arreglo globla: String []datos = new String[1];
Eliminardespues cree un metodo para el onclick asi:
public void iniciarSesion(View v){
datos[0] = user.getText().toString();
datos[1] = pass.getText().toString();
new CreateUser().execute();
}
y quite todo lo relacionado con el OnClickListener ya que no es necesario
tambien borre el llamado del texto ya que ya lo hacien en el evento onclick
// Borrados
String username = user.getText().toString();
String password = pass.getText().toString();
y mi xml queda asi: agregamos la propiedad onClick al xml
Button
android:id="@+id/login"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_above="@+id/register"
android:layout_alignLeft="@+id/password"
android:onClick="iniciarSesion"
android:layout_alignRight="@+id/password"
android:text="Login"
y los demas botes seria de la misma forma. Espero que les sirva y si alguna duda pueden preguntarme.
Primero gracias por resolver este error que a varios afecta. Dudas acerca de tu comentario, el método iniciarSesion, ¿lo implementas dentro del onclick o lo implementas fuera y lo llamas dentro del onclick ???
EliminarOtra, que lineas borraste del OnclickListener, ¿todas?
¿mSubmit.setOnClickListener(this);?
¿mRegister.setOnClickListener(this);?
otra, la clase CreateUser esta implementada sólo en el Register.java y no en Login.java.
espero que me puedas ayudar, gracias y saludos :)
Te muestro todas las modificaciones que realize, ya hay compara cuales fueron. y el metodo iniciarSesion lo referencias con --> (View v) que es un metodo para el evento onclick el cual tu lo asignas en la propiedad del boton en el xml, Se asignas el nombre del metodo onclick a tu boton de como se llama el metodo. ---> android:onClick="iniciarSesion"
Eliminary si elimine mSubmit.setOnClickListener(this); yo solo lo uso el listener para funciones como el checkbox o el radiobutton.
import android.app.Activity;
Eliminarimport android.app.ProgressDialog;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.AsyncTask;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.util.Log;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;
import org.apache.http.message.BasicNameValuePair;
import org.json.JSONException;
import org.json.JSONObject;
import java.util.ArrayList;
import java.util.List;
public class Login extends Activity{
private EditText user, pass;
String []sesion = new String [1];
private ProgressDialog pDialog;
JSONParser jsonParser = new JSONParser();
private static final String LOGIN_URL = "censurado la ubicacion/login.php";
private static final String TAG_SUCCESS = "success";
private static final String TAG_MESSAGE = "message";
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// setup input fields
user = (EditText) findViewById(R.id.edtuser);
pass = (EditText) findViewById(R.id.edtpass);
}
public void logeo(View v) {
// TODO Auto-generated method stub
sesion[0]= user.getText().toString();
sesion[1]= pass.getText().toString();
new AttemptLogin().execute();
}
public void registrarU(View v){
Intent i = new Intent(this, Registrar.class);
startActivity(i);
}
class AttemptLogin extends AsyncTask {
@Override
protected void onPreExecute() {
super.onPreExecute();
pDialog = new ProgressDialog(Login.this);
pDialog.setMessage("Attempting login...");
pDialog.setIndeterminate(false);
pDialog.setCancelable(true);
pDialog.show();
}
@Override
protected String doInBackground(String... args) {
int success;
try {
// Building Parameters
List params = new ArrayList();
params.add(new BasicNameValuePair("username", sesion[0]));
params.add(new BasicNameValuePair("password", sesion[1]));
Log.d("request!", "starting");
JSONObject json = jsonParser.makeHttpRequest(LOGIN_URL, "POST",
params);
Log.d("Login attempt", json.toString());
success = json.getInt(TAG_SUCCESS);
if (success == 1) {
Log.d("Login Successful!", json.toString());
SharedPreferences sp = PreferenceManager
.getDefaultSharedPreferences(Login.this);
SharedPreferences.Editor edit = sp.edit();
edit.putString("username", sesion[0]);
edit.commit();
Intent i = new Intent(Login.this, RegistrarCitas.class);
finish();
startActivity(i);
return json.getString(TAG_MESSAGE);
} else {
Log.d("Login Failure!", json.getString(TAG_MESSAGE));
return json.getString(TAG_MESSAGE);
}
} catch (JSONException e) {
e.printStackTrace();
}
return null;
}
protected void onPostExecute(String file_url) {
pDialog.dismiss();
if (file_url != null) {
Toast.makeText(Login.this, file_url, Toast.LENGTH_LONG).show();
}
}
}
}
Este comentario ha sido eliminado por el autor.
EliminarMuchas gracias por tu respuesta, implemente lo que me dijiste y ya no estan esos errores.
EliminarClaro que nada es tan fácil, ahora abro la aplicación y se cae, al intentar logear y registrar.
:s estoy intentado solucionarlo. Cualquier ayuda me viene de maravilla. Saludos
pon tu codigo java y el xml para yo poder ver el error o que falta
Eliminardisculpa joel podrías explicar mejor como realizaste el cambio en las lineas de codigo que pasaste por favor
EliminarEste comentario ha sido eliminado por el autor.
EliminarMuchas gracias por tu tiempo Ramiro en compartir tu conocimiento, muchos errores me encontré pero no fue tu culpa y ademas me ayudo tener errores... fue que yo tengo una versión mas nueva el caso que se fueron quitando algunas cosas se podría decir como la función de: import org.apache.http.HttpEntity; que se mostraba en rojo, la solución fue trabajar en la misma versión de android del codigo fuente 21 y yo tengo asta el 23 ese fue el mismo problema para crear la actualizacion en Play Store.. También hay otra solución pero no entrare en detalles
ResponderEliminarSi podes comenta cuales fueron los errores y como los solucionaste. Así otros le sirve otra información. Siempre la idea es compartir.
EliminarYo tengo es mismo error en las librerias y nose como resolverlo
EliminarQuisiera que me dieran la definición de que es una basa de datos remota
ResponderEliminarRemoto
EliminarLa palabra se utiliza en tecnologías de la información para definir sistemas o elementos de sistemas que se encuentran físicamente separados de una unidad central. Un puente remoto es un dispositivo que hace posible la comunicación entre, por ejemplo, una LAN y una red de área amplia. Fuente: http://www.mastermagazine.info/termino/6524.php
como podria hacer que rellene un formulario una sola vez y que esa info quede solo en el cel sin usar bases de datos
ResponderEliminarAmigo no me reconoce estas importaciones
ResponderEliminarimport org.apache.http.NameValuePair;
import org.apache.http.message.BasicNameValuePair;
y por ende no me corre la aplicacion que puedo hacer
intenta descargando las librerías apache y metiendo el archivo en la carpeta libs
Eliminarhttp://www.java2s.com/Code/Jar/a/Downloadapachehttpcomponentshttpcorejar.htm
Mucho más facil es poniendo esto en el gradle:
Eliminarcompile 'org.jbundle.util.osgi.wrapped:org.jbundle.util.osgi.wrapped.org.apache.http.client:4.1.2'
Este comentario ha sido eliminado por el autor.
ResponderEliminarHola Anam. ¿Lo conseguiste?
ResponderEliminarYo tengo el mismo problema, he estado buscando documentación, y parece que el SDK 23 ya no tiene estas librerías por defecto, hay que importarlas. La verdad es que yo lo estoy intentando, y no lo consigo. Cuando ya he conseguido importar la librería, creo la dependencia en estructura, incluyo la instrcución en GRADLE pero entonces el proyecto no me reconoce los directorios en res.
La segunda opción que he encontrado es la de usar OkHttp.
Si alguien puede ayudar con un mini tutorial para resolver esto, yo se lo agradeceré-
Un saludo.
Hola, excelente tutorial me ayudo un monton. Solo tengo una duda y espero me puedas ayudar, lo unico que me falta es poder mantener y cerrar la sesion en la aplicacion.
ResponderEliminarEspero me puedas ayudar :) Saludos
Googlealo como "tareas de segundo plano" y si queres que el usuario y contraseña se guarde podrías usar el "sharepreference" http://cursoandroidstudio.blogspot.com.ar/2014/07/sharepreferences.html
EliminarMuchas gracias :) ya funciona ala perfeccion. Por casualidad no tienes algun tutorial de material design?
Eliminartodavía no he hecho nada, pero estoy pensando en hacerlo.
EliminarDespués si podes comenta como lo hiciste para que otros lo puedan leer y les sea de ayuda.
Como conseguiste manter el inicio de sesion y poder cerrar la sesion tambien. D:
EliminarHola ramiro me funciono, excelente post, tengo una duda o como le hago para almacenar la hora actual ejemplo se loguea alas 8:00 am que la hora me la guarde en un editext para asi mandarserla a mysql a que hora se conecto o algo asi.¿como manejo esos parametros,recoger hora,guardar hora y mandarla por php y de ahi a mysql ?como sabras de algun tutorial que me ayude.De antemano muchas gracias
ResponderEliminarExcelente tutorial,
ResponderEliminarTengo el siguiente problema. La BBDD funciona a la perfección al utilizarla desde el navegador, pero al hacer login (Insertar usuario y contraseña) en la aplicación de Android aparece el mensaje "Desafortunadamente Prueba se ha detenido".Todas las actividades funcionan de forma independiente, ya que las he lanzado una por una como LAUNCHER.
Un saludo.
fijate si tenes todo lo necesario en el AndroidManifest.. como permisos para usar internet
Eliminarpuedes decirme si ya arreglaste el problema
EliminarMuchas gracias por tu tiempo.
ResponderEliminarEl manifest esta todo en orden, ya que al testear actividad por actividad funcion(poniendo cada una como launcher) y la linea de acceso a Internet no falta. Volveré a realizar todo de nuevo. Un saludo
10-30 12:18:05.656: W/dalvikvm(15045): threadid=13: thread exiting with uncaught exception (group=0x4158fd88)
Eliminar10-30 12:18:05.656: E/test(15045): Exception
FATAL EXCEPTION: AsyncTask #3
Process: com.example.pruebabase, PID: 15045
java.lang.RuntimeException: An error occured while executing doInBackground()
at android.os.AsyncTask$3.done(AsyncTask.java:300)
at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355)
at java.util.concurrent.FutureTask.setException(FutureTask.java:222)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
at java.lang.Thread.run(Thread.java:841)
Caused by: java.lang.NoSuchMethodError: org.apache.http.impl.client.DefaultHttpClient.execute
at com.example.pruebabase.JSONParser.makeHttpRequest(JSONParser.java:108)
at com.example.pruebabase.Login$AttemptLogin.doInBackground(Login.java:111)
at com.example.pruebabase.Login$AttemptLogin.doInBackground(Login.java:1)
at android.os.AsyncTask$2.call(AsyncTask.java:288)
at java.util.concurrent.FutureTask.run(FutureTask.java:237)
... 4 more
E/WindowManager(15045): android.view.WindowLeaked: Activity com.example.pruebabase.Login has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView{419cd4e0 V.E..... R......D 0,0-456,144} that was originally added here
at android.view.ViewRootImpl.(ViewRootImpl.java:352)
at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:248)
at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:69)
at android.app.Dialog.show(Dialog.java:294)
at com.example.pruebabase.Login$AttemptLogin.onPreExecute(Login.java:95)
at android.os.AsyncTask.executeOnExecutor(AsyncTask.java:587)
at android.os.AsyncTask.execute(AsyncTask.java:535)
at com.example.pruebabase.Login.onClick(Login.java:74)
at android.view.View.performClick(View.java:4575)
at android.view.View$PerformClick.run(View.java:18561)
at android.os.Handler.handleCallback(Handler.java:733)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5136)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:819)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:635)
at dalvik.system.NativeStart.main(Native Method)
¿Que librerias/.jar debo añadir para que funcione mi proyecto?
ResponderEliminarNinguna!
EliminarSolo pon esto en el gradle!
compile 'org.jbundle.util.osgi.wrapped:org.jbundle.util.osgi.wrapped.org.apache.http.client:4.1.2'
Muchas gracias por el tutorial, muy bien explicado pero tengo un detalle en la clase doInbackgound me sale este error: Method getText() must be called from the UI Thread
ResponderEliminarNo se como corregirlo, si alguien pudiera ayudarme, tenga en cuenta que soy nuevo en android no le entiendo muy bien, muchas gracias :)
Hola ramiro, excelente tutorial, lo eh probado directamente de los archivos para descargar y funciona perfecto, el problema es que al hacerlo con mi propio dominio me ocasiona problema con las librerías, y nunca en mi vida eh programado en android es la primera vez mira:
ResponderEliminarError:(13, 23) error: package org.apache.http does not exist
Esta es una linea del resto y el otro problema es este:
Error:Execution failed for task ':app:compileDebugJavaWithJavac'.
> Compilation failed; see the compiler error output for details.
Alguien puede explicarme que puedo hacer?
Hola Ramiro, programo con Netbeans, he visto en tus videos y realmente te felicito por la labor que haces, he visto como es el desempeno con Android Studio, por favor recomiendame una buena literatura para trabajar bien con Studio ya que con Netbeans como dicen en mi pais tarbajas a pulmon, gracias.
ResponderEliminarEl getting started, guía ofical de google http://developer.android.com/intl/es/training/index.html
EliminarYo sinceramente, cuando empece no entendí nada de esta página.. aprendí a mucho YOUTUBE.. después cuando ya sabía un poco, la empece a mirar de nuevo.
Porque la verdad cada uno subo lo que quiere.. donde puede estar bien, o puede estar mal.. en cambio lo developers.google, es lo oficial, siempre va a estar bien
Ramiro buenos tardes.
ResponderEliminarMuy re bueno el tutorial. Tengo una duda, si es que ya inicio sesion en el Home de la aplicacion, como mantengo la sesion iniciada despues de cerrar la app. Al cerrarla me aparece denuevo el login en ves de que guarde la sesion.
De antemano Muuuuchas gracias.
hay una función que ahora no recuerdo, es para que siga la app funcionando en el background, entonces la app sigue funcionando siempre.. la otra vez guardar el usuario y contraseña con sharepreference..
EliminarHola tengo una mega duda, soy nueva en esto y me arriesgue hacer una app con lo sig:
ResponderEliminarEstoy desarollando una app que lee codigos qr (ya lo hace) y que tambien agregre, consulte y elimine datos desde la app a la base de datos que esta hecha en MySQLworkbench, no entiendo muy bien como desarrollar esa parte, lei y tengo que hacerlo con un webservices, espero me puedan orientar se los agradeceria. Saludos
Buenas crack, podrías hacer el json para versión apk mayor de 23?? ya que los métodos que usas quedan anticuados, gracias y un saludo!
ResponderEliminarnop, solo hago tutos nuevos y le queda al expectador en sacarle el provecho y actualizarlo.
EliminarSiempre van es estar desactualizado además.
Gracias Ramiro me ha sido de mucha ayuda el tutorial. ;)
ResponderEliminarEste comentario ha sido eliminado por el autor.
ResponderEliminarHola gracias por el tutorial, me ha servido demasiado, soy nueva con android y esta muy bien explicado, ya tengo todo pero en JSONParser.java me marca error en todas las librerias que tienen que ver con apache, me puse a investigar y encontre que es porque a la nueva version de android studio le quitaron apache, pero no puedo encontrar como hacer que funcione.
ResponderEliminarTambien dicen que hay que agregar algo al gradle, pero tampoco me funciona.
Tienes alguna idea de como resolverlo porfavor. gracias.
Hola; Que buen video FELICITACIONES, tengo la siguiente duda, entro en mi link correspondiente pero me sale de una
ResponderEliminar{"success":0,"message":"Problema con la base de datos, vuelve a intentarlo"} y no me da más opciones como si no se estuviera conectando.
El código fuente del archivo login.php esta sesión no lo esta tomando:
if (!empty($_POST)) {
//obtener los usuarios respecto a la usuario que llega por parámetro
$query = "
SELECT
id,
username,
password
FROM users
WHERE
username = :lifescom_lifes17
";
$query_params = array(
':username' => $_POST['lifescom_lifes17']
);
try {
$stmt = $db->prepare($query);
$result = $stmt->execute($query_params);
}
catch (PDOException $ex) {
//para testear pueden utilizar lo de abajo
//die("la consulta murio " . $ex->getMessage());
$response["success"] = 0;
$response["message"] = "Problema con la base de datos, vuelve a intentarlo";
die(json_encode($response));
}
Al parecer no está evaluando la condición inicial que es la de mostrar la información del usuario (id,username,password) y entra al apartado try para mostrar esta información
$response["success"] = 0; $response["message"] = "Problema con la base de datos, vuelve a intentarlo";
tu error es que tu estas pasando como variable el :lifescom_lifes17, a la consulta y solo tienes como variable el :username.
Eliminartu codigo seria algo asi:
$query = "
SELECT
id,
username,
password
FROM users
WHERE
username = :username
";
$query_params = array(
':username' => $_POST['lifescom_lifes17']
);
ah y una aclaracion que el $_POST[] es otra variable que envias con el submit o el json.
Eliminarejemplo:
etiqueta de formulario --> input type="text" name="username"
cuando tu haces un submit el 'name' se envia con un post o get como una variable de esta forma:
$_POST['username'] o $_GET['username'].
espero que te sirva ;)
Hola me pueden ayudar cn la conxion a postgres
ResponderEliminarHola disculpa sabes que esto lo estoy probando de forma local con xammp pero al momento de correr en el emulador me sale app has stopped
ResponderEliminarHola a todos. La app en el emulador o en mi móvil si estoy conectada al wifi de casa me va perfectamente. El problema es cuando mi móvil está haciendo uso de los datos o tiene una dirección IP que no pertenece al rango de mi casa. Qué error puede ser? Cómo lo puedo solucionar? Gracias
ResponderEliminarQue tal ramiro, muy buen video pero me sale el siguiente errror, te agradeceria si me pudieras ayudar.
ResponderEliminarTe dejo el link para que veas el error:
http://pruebabd.esy.es/luisconect/get_all_empresas.php
Apenas me inicio y decidí empezar por hechar andar el servidor y por php. Tengo el problema con el register.php que me saca el error "Error base de datos2. Porfavor vuelve a intentarlo"}. Solo lo modifique para que recibiba mas datos la mase de datos, espero su ayuda (dejo el link del codigo mas abajo).
ResponderEliminarhttp://pastebin.com/raw/PxgU5wnS
hola rodrigo un favor me pasarias el usuario y la contraseña de la cuenta de hostinger de esta aplicacion por favor
ResponderEliminarEstas loco, tengo mi cosas ahí.
EliminarHola Ramiro,
ResponderEliminarFelicitaciones por tu maravilloso tutorial.
He seguido todo tal cual , lo explicas en tus videos.
Pero al momento de teclear en la barra del navegador , para comprobar la conexión con mi base de datos ( por cierto también uso Hostinger) me sale el siguiente error:
Failed to connect to the database: SQLSTATE[28000] [1045] Access denied for user 'u812368499_lili'@'10.2.1.14' (using password: YES)
AYuda!!!
Gracias,
Quiero autoresponderme , en este error, por si de caso , a alguien le ha tiene este mismo error,
ResponderEliminarLa solución es muy sencilla, se tiene que crear una nueva base de datos, hay que hacer un backup de la base de datos que teniamos creada inicialmente, y importamos nuestras tablas a esta nueva base de datos, esto para no tener que crear nuevamente nuestras tablas, !!!.
Y funciona comprobado.
Un saludo.
Tenia el error con los archivos JSONParser, con las librerias
ResponderEliminarorg.apache.http.cliente
Deciros que arriba hay un link para bajar un .jar, pues no sirve!! hablo para android studio, no se para las demás plataformas.
Después de buscar mucho en google , he solucionado el problema,
Incluir estas lineas, en el build gradle:
compile 'org.jbundle.util.osgi.wrapped:org.jbundle.util.osgi.wrapped.org.apache.http.client:4.1.2'
compile 'com.android.support:appcompat-v7:23.1.1'
A mi me ha funcionado en Android Studio.
Exactamente en que parte del build gradle ??
EliminarHola Ramiro tengo una pregunta los PHP los creas desde MySQL o por que medio los creas es que no me queda muy claro ?
ResponderEliminarYo utilizo "Sublime Text 2" pero podes usar el que vos quieras, dreamweaver, notepad c++, etc. El que te resulte mas comodo.
EliminarHola ramiro muchas gracias por el tutorial, ahora al momento de pegar el código se me generan una me serie de errores, me imagino que debe ser por que no tengo las librerías en el AndroidStudio que tu utilizaste , por favor dime el nombre delas librerías que utilizaste
ResponderEliminarTenia errores en el JASONParser.java y en el Login.java Gracias al comentario MaliJ Solucione el error del JsonParser.java pero
EliminarEn el Login.java:
Strings Username = user.getText().toStrings();
Strings Password = pass.getText().toStrings();
tengo este error, si alguien me puede ayudar con este error le agradecería bastante, gracias.
ya lo comente arriba
Eliminarhola muy buenos tutoriales tengo una duda y necesito ayuda, tengo mi plicacion pero solo quiero mostrar el ultimo dato agregado a la base de datos y que me lo muestre en un textview, en que parte se puede tomar esta variable y mostrarla o hay que hacerle al JSON algo mas GRACIAS
ResponderEliminareso se hace en el archivo de php....
Eliminarcon un lastInsertId();
hola muy buenos tutoriales tengo una duda y necesito ayuda, tengo mi plicacion pero solo quiero mostrar el ultimo dato agregado a la base de datos y que me lo muestre en un textview, en que parte se puede tomar esta variable y mostrarla o hay que hacerle al JSON algo mas GRACIAS
ResponderEliminartenes que trabajar con un archivo .php que extraiga el último registro, como se hace?. Tenes que ver el login.php y register.php ahí hago la consultas php.
EliminarExtraes y los metes en los textbox
hola que tal, de antemano gracias por el turorial, tengo una duda no puedo importar lo siguiente:
ResponderEliminarimport org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.utils.URLEncodedUtils;
import org.apache.http.impl.client.DefaultHttpClient;
import org.json.JSONException;
import org.json.JSONObject;
Ami me da error en todas estas librerias:
ResponderEliminarimport org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.utils.URLEncodedUtils;
import org.apache.http.impl.client.DefaultHttpClient;
he probado en el gradle poner el legacy y nada, si me pude ayudar porfavor.
Hola Ramiro , podrían actualizar este tutorial , ya que hay bastantes errores en las librerías de http client , y en Strings Username = user.getText().toStrings();
ResponderEliminarStrings Password = pass.getText().toStrings(); tanto en la clase Login como en la Register , y por lo que veo para solucionarlo cambian bastante el código , se podría actualizar todo y si no fuera mucho agregar una opción para que muestre en un LAyout los datos de mi base , por ejemplo si quisiera ver los datos de un usuario registrado para modificarlo o darlo de baja ? , hace mucho pido esto podría ser por favor ?, desde ya muchas gracias .
Este comentario ha sido eliminado por el autor.
ResponderEliminarEste comentario ha sido eliminado por el autor.
ResponderEliminarHombre buenas noches, gracias por el tutorial está excelente pero lamentablemente no me funciona tal cual como usted, tengo un problema con estas librerías me salen en error.
ResponderEliminarimport org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.utils.URLEncodedUtils;
import org.apache.http.impl.client.DefaultHttpClient;
import org.json.JSONException;
Hola Sebastian como solucionaste el tema de las librerías, tengo el mismo problema.
EliminarSaludos muchas Gracias
Agrega la siguiente linea en archivo build.gradle, en dependeces
Eliminarcompile 'org.jbundle.util.osgi.wrapped:org.jbundle.util.osgi.wrapped.org.apache.http.client:4.1.2'
Muy cool el tutorial, lo logré hacer pero tengo una pregunta si deseo registrar mas datos como nombre o telefono o demas como lo haría ?
ResponderEliminarsolo le agregas mas campos, hasta ahora son: user, pass
Eliminardebajo de estos, agregale nom, tel, y seguis todo el proceso
Hola que tal, estaría muy bien poder contar con un tutorial sobre como agregar más campos, puesto que intenté hacerlo y no es tan sencillo como "agregar más campos", estuve haciendolo y al parecer aún tengo algunos fallos al respecto. Saludos y buen tutorial.
Eliminaren php seria agregar tus campos de esta forma.
Eliminar$query = "INSERT INTO usuarios ( username, password, correo, no_telefono, estatus ) VALUES ( :user, :pass , :email, :cell, '1') ";
//actualizamos los token
$query_params = array(
':user' => $_POST['username'],
':pass' => $_POST['password'],
':email' => $_POST['correo'],
':cell' => $_POST['no_telefono']
);
Esta genial... Pero si tengo una aplicación y para inscribirme me pide mis datos y cuando lo lleno me corre directo a la aplicación ahora si deseo ingresar de nuevo me aparece el login ¿quisiera saber como se hace para que corra directo mi aplicación sin pedirme el login?
ResponderEliminar@Override
Eliminarprotected void onResume() {
super.onResume();
String valor = preferencias.getString(getString(R.string.est_Telefono), "");
if(!valor.equals("")){
Intent Intent =new Intent(Registrar_Usuario.this,Validacion.class);
startActivity(Intent);
this.finish();
}
}
disculpa pero donde se agrega esa parte de codigo
EliminarTengo un error quiero convinar esto con un login de facebook pero me genra errores en el API, como puedo arreglar eso,algunas librerías no son soportadas por el API23 y la de facebook me genera errores con el API 21
ResponderEliminarHola Tengo un error en los String username = user.getText().toString();
ResponderEliminarString password = pass.getText().toString()
Me deja Registrar a un nuevo usuario pero en el momento que voy a ingresar y no ingresa
error Using Variables on UI Thread from Worker Thread
ResponderEliminarpara felicitarlo por los tutoriales, tengo un inconveniente con hostinger ya que no me deja crear una cuenta gratuita, me gustaría que me recomendara otro hosting gratuito y si puedes realizar un vídeo tutorial para su respectivo funcionamiento, muchas gracias y espero que me puedas colaborar.
ResponderEliminarquien me puede colaborar con lo siguiente:
Eliminarlo que pasa es que no me funcionó con hostinger gratuito entoces estoy utilizando 2freehosting.com y no se como sacar la URL para conectar la base de datos, ejemplo la de hostinger utilizan la siguiente URL: basesdedatosremota.meximas.com/cas/login.php
Hola, Ramiro.
ResponderEliminarLlevo 5 días tratando de resolver mi problema al tratar de conectar mi app en Android con mi base de datos MySQL, alojada en mi servidor de Hostinger.
Me parece bien tu método, pero a parte de éso, necesito que la app pueda usar buscar y usar atributos de alguna tabla de mi base de datos (alguno de estos atributos son de tipo MEDIUMBLOB, o sea, son archivos excel y pdf). Mi pregunta es: mediante JSON y alguna página que haga esa operación de descarga, yo prodría obtener esos archivos?
Espero tu pronta respuesta. Saludos.
Buenas , tengo un problema, al iniciar la apk en android se me sa
ResponderEliminarle un problema el apk ya corriendo, es en el register dado que para crear una cuenta, apretando registe me sale "login incorrecto" se podra areglar ese problema ya que en el hosting funciona normalmente.
gracias
Hola ramiro, muy buen tutorial.
ResponderEliminarCuando paso la aplicacion a mi telefono, al presionar el boton login, me sale "aplicacion se detuvo"
por qué será?
cuando pruebo localhost:2020/login.php me funciona bien
es como si el telefono no conecta con la base de datos
que debo hacer? llevo días intentado solucionar el problema pero nada
será que tengo que configurar algo en mi computadora?
te agradeceria que me ayudaras por favor :(
Ramiro, estoy iniciando en android y es una muy buena estrategia entrega la aplicacion con el acceso a la bd, normalmente cuando uno quiere aprender programacion solo encuentra errores y nada que funcione, en cambio en tu ejemplo de una tienes una aplicacion que funciona , muy buena esa estrategia ,, felicitaciones
ResponderEliminarBuenas Ramiro.
ResponderEliminarAntes de nada felicitarte por tus aportes. Me son súper útiles.
Quería comentarte que en tu programa has puesto los: "String username = user.getText().toString(); y String password = pass.getText().toString();" dentro del doInBackground. Ésto peta porque pones una función de UI dentro de algo de ASYNC. Yo lo solucioné moviéndolo dentro de la función "OnClick".
Espero que te ayude y sigue así crack, ayudas a mucha gente.
Saludos,
__Albert__
hola tengo un problema cuando intento loguearme y se corta la conexion al internet la app se detiene y queria saber como puedo hacer que en vez que se detenga me salga algun mensaje o ejecutarlo en segundo plano tu que me recomiendas y buen tuto felicidades
ResponderEliminarcomo puedo resolver este error que sale en estas lineas:
ResponderEliminarString username = user.getText().toString();
String password = pass.getText().toString();
Hola tengo Android 2.1.2 yo lo solucioné asi:
Eliminaren la clase Login, en el método onClick :
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
switch (v.getId()) {
case R.id.login:
String username = user.getText().toString();
String password = pass.getText().toString();
new AttemptLogin().execute(username, password);
break;
case R.id.register:
Intent i = new Intent(this, Register.class);
startActivity(i);
break;
default:
break;
}
}
y despues en AttemptLogin en doInBackground... cambia los String username y String password:
protected String doInBackground(String... args) {
int success;
String username = args[0],
password = args[1];
...
...
A mi me funcionó, saludos.
YO TAMBIEN TENGO UN PROBLEMA EN EL METODO doInBackground de la clase Login, me tira error en Log.d("Login attempt" , json.toString()) Y EN LA CLASE AttemptLogin;
el error que me tira es:
NULL POINTER EXCEPTION
ojalá y me puedan ayudar.
Hola buen dia como puedo solucionar el error que me da en el JSONParser ademas me tiraa error en el Login y el Registrer, ¿tiene que ver el nivel de API que estoy usando o tengo que hacer cambios al codigo?
ResponderEliminarHola Ramiro tengo problemas con el codigo podras subir un video actualizado sobre este mismo tema la verdad es muy interesante
ResponderEliminarCuando me intento logear sin tener conectado el cel a internet truena la app
ResponderEliminarBuenas noches ramiro, tengo un problema cuando copio el codigo donde dice:
ResponderEliminarimport org.apache.http.NameValuePair;
import org.apache.http.message.BasicNameValuePair;
Me envia Error como podria solucionar.
Gracias
tienes que añadir el jar tu libreria
EliminarHola Ramiro.
ResponderEliminarExcelente tutorial.
Realmente si funciona.
Lo que tengo es un pequeño problema con los acentos y "ñ". En mi base de datos nos aparece el nombre o el datos completo.
Cuando alguien quiere registrarse por ejemplo nombre es Néstor.
En la tabla solo aparece "N" ...
Cómo lo soluciono?
buenas tardes Ramiro gracias por compartir tu conocimiento con un novato como yo , la app funciona de maravilla y de verdad agradezco tu dedicacion y esfuerzo en hacer estos videos , pero quisiera saber de que manera mantener iniciada la sesion y cerrarla , y tambien si hay alguna manera de saber quien esta en linea, t lo agradeceria muchisimo y sigue asi Dios t bendiga
ResponderEliminarTe amo era justo lo que necesitaba... Funciona perfectamente. Gracias sigue asi.
ResponderEliminarMuy buen tutorial felicidades!!
ResponderEliminarYO TAMBIEN TENGO UN PROBLEMA EN EL METODO doInBackground de la clase Login, me tira error en Log.d("Login attempt" , json.toString()) Y EN LA CLASE AttemptLogin;
ResponderEliminarel error que me tira es:
NULL POINTER EXCEPTION
ojalá y me puedan ayudar.
Hola y si quiero obtener datos y poner datos y actualizar datos desde dentro de la aplicación como se podría hacer? Esto solo valdría para login y registrar pero para modificar datos y actualizarlos y meter datos desde la misma aplicación no valdría no?
ResponderEliminarcomo cierro la sesion?
ResponderEliminarHola ! al iniciar todo bien después cuando me salgo al poner cualquier usuario aunque este incorrecto me deja entrar de nuevo crees puedas ayudarme?
ResponderEliminarAlguien me puede ayudar?
ResponderEliminarLlevo varios días con el mismo problema y no puedo más...
He pasado de la api23 a la 18 para poder trabajar con las librerias Apache y he añadido en el Manifest compile 'org.jbundle.util.osgi.wrapped:org.jbundle.util.osgi.wrapped.org.apache.http.client:4.1.2' . Y cuando pensaba que ya estaría todo arreglado me encuentro al ejecutar con esto:
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':app:processDebugResources'.
> com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command 'C:\Users\...\AppData\Local\Android\sdk\build-tools\23.0.3\aapt.exe'' finished with non-zero exit value 1
* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.
Un saludo
Ya lo solicione al cambiar la Api 23 a la 18 android se cargo no se como el sdk... Un saludo.
EliminarTengo un problemilla a la hora de ejecutar la app.
ResponderEliminarSe que me funciona los .php porque los probé pero cuando quiero ejecutar la app desde android rompe a la hora de entrar en el registro o login (he de decir que antes tengo un menú por el cual tengo 2 botones registrarse y loguearse, tu escoges y te llevan a sus correspondientes views).
Los errores que me salen por pantalla al querer acceder al register me sale que se debe al params.add(new BasicNameValuePair("username", username[0]));
Y por este problema me salen 2 más en la clase JSONParser. Es como si no le estuviera pasando ningun valor o no lo reconociera...
El uso de username[0] se debe a que tengo una variable global que la llamo String iniciarSesion[];
Se agradecería mucho la ayuda...
Saludo.
Tengo problemas cuando ejecuto la maquina virtual al conectar con:
ResponderEliminarprivate static final String LOGIN_URL = "http://localhost/cas/login.php";
hola a la hora de querer correr mi consulta me manda este error a que se debe.
ResponderEliminarNotice: Undefined variable: login_ok in C:\xampp\htdocs\UThuejotzingo\consulta.php on line 52
{"success":0,"message":"Login INCORRECTO"}
Y la linea tiene esto
if ($login_ok) {
$response["success"] = 1;
$response["message"] = "Login correcto!";
die(json_encode($response));
} else {
$response["success"] = 0;
$response["message"] = "Login INCORRECTO";
die(json_encode($response));
}
hola ramiro muchas gracias por los video tutoriales disculpa que te moleste pero como le puedo hacer que por medio de un qr me mande a otro activity
ResponderEliminarHola Ramiro, excelente aporte, funciona a la perfección la aplicación.
ResponderEliminarYo la echado a andar perfectamente, pero hace unos dias me ha dado un error en:
JSONObject json =jsonParser.makeHttpRequest(LOGIN_URL, "POST", params);
En concreto makeHttpRequest, he probado cambiando la version del sdk, incluyendo múltiples librerias, etc. Y no he dado con la tecla.
Alguna idea de como se puede solventar el error??
pd: estoy trabajando con:
compileSdkVersion 25
minSdkVersion 19
targetSdkVersion 25
versionCode 1
versionName "1.0"
Un saludo