
Tutorial Android PhpMysql
Tutorial de login do Android PHP Mysql usando HttpURLConnection
O Android desaprovou o módulo do Apache (HttpPost e HttpGet) desde o nível 22 da API. Agora, a maneira alternativa é usar o JAVA HttpURLConnectionClasse. Este tutorial descreve o login do Android PHP Mysql para lidar com dados GET e POST.
Android php mysql login system contém duas atividades android, MainActivity.java e SuccessActivity.java. MainActivity é o formulário de login atual, onde você pode ver o nome de usuário, a senha e um botão, enquanto que o SuccessActivity é um formulário simples com uma mensagem de sucesso que é acionada após o login bem-sucedido. As funções de ambas as atividades são detalhadas na seção Android abaixo.
Além da parte android, a implementação de mysql e php é consideravelmente fácil de fazer.
Android php mysql login system contém duas atividades android, MainActivity.java e SuccessActivity.java. MainActivity é o formulário de login atual, onde você pode ver o nome de usuário, a senha e um botão, enquanto que o SuccessActivity é um formulário simples com uma mensagem de sucesso que é acionada após o login bem-sucedido. As funções de ambas as atividades são detalhadas na seção Android abaixo.
Além da parte android, a implementação de mysql e php é consideravelmente fácil de fazer.
MySql
A tabela 'tbl_login' contém nome de usuário e senha do usuário.CREATE TABLE 'tbl_login' (
'email' varchar(255) NOT NULL,
'password' varchar(255) NOT NULL
);
Tabela mantém linha de dados como esta.INSERT INTO 'tbl_login' ('email', 'password') VALUES
('Armstrongtek@gmail.com', 'password');
PHP
- inclua o arquivo config.inc.php para conectar o banco de dados.
- Verifique se os dados do POST estão definidos no android.
- Consultar o banco de dados para ver se a linha existe ou não.
- Devolva o resultado.
login.inc.php
<?php
include 'config.inc.php';
// Check whether username or password is set from android
if(isset($_POST['username']) && isset($_POST['password']))
{
// Innitialize Variable
$result='';
$username = $_POST['username'];
$password = $_POST['password'];
// Query database for row exist or not
$sql = 'SELECT * FROM tbl_login WHERE email = :username AND password = :password';
$stmt = $conn->prepare($sql);
$stmt->bindParam(':username', $username, PDO::PARAM_STR);
$stmt->bindParam(':password', $password, PDO::PARAM_STR);
$stmt->execute();
if($stmt->rowCount())
{
$result="true";
}
elseif(!$stmt->rowCount())
{
$result="false";
}
// send result back to android
echo $result;
}
?>
config.inc.php
<?php
$servername = "localhost";
$username = "root";
$password = "root";
$dbname = "Android";
try {
$conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
catch(PDOException $e)
{
die("Falha ao se conectar");
}
?>
Android
A imagem no topo da página mostra tanto MainActivity.java quanto SuccessActivity.java, respectivamente.MainActivity.java
- Clique no botão LogIn verificar login ()função é acionada. Qual principiaAsyncLoginclasse para executar tarefas assíncronas .
- onPreExecute (), invocado no thread de interface do usuário antes que a tarefa seja executada. Aqui estamos exibindo mensagem de carregamento.
- doInBackground (Params…), invocado no thread de segundo plano imediatamente após
onPreExecute ()termina a execução. O envio e recebimento de dados de e para o arquivo phpusandoHttpURLConnection classe fez nesta função. - onPostExecute (Result), invocado no thread da interface do usuário após a conclusão da computação em segundo plano. Aqui estamos verificando o resultado recebido.
- Os parametros params [0] e params [1] é do método de execução do AsyncLogin.
package com.guru.login;
import android.app.ProgressDialog;
import android.content.Intent;
import android.content.SharedPreferences;
import android.net.Uri;
import android.os.AsyncTask;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
public class MainActivity extends AppCompatActivity {
// CONNECTION_TIMEOUT and READ_TIMEOUT are in milliseconds
public static final int CONNECTION_TIMEOUT=10000;
public static final int READ_TIMEOUT=15000;
private EditText etEmail;
private EditText etPassword;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Get Reference to variables
etEmail = (EditText) findViewById(R.id.email);
etPassword = (EditText) findViewById(R.id.password);
}
// Triggers when LOGIN Button clicked
public void checkLogin(View arg0) {
// Get text from email and passord field
final String email = etEmail.getText().toString();
final String password = etPassword.getText().toString();
// Initialize AsyncLogin() class with email and password
new AsyncLogin().execute(email,password);
}
private class AsyncLogin extends AsyncTask<String, String, String>
{
ProgressDialog pdLoading = new ProgressDialog(MainActivity.this);
HttpURLConnection conn;
URL url = null;
@Override
protected void onPreExecute() {
super.onPreExecute();
//this method will be running on UI thread
pdLoading.setMessage("\tLoading...");
pdLoading.setCancelable(false);
pdLoading.show();
}
@Override
protected String doInBackground(String... params) {
try {
// Enter URL address where your php file resides
url = new URL("http://localhost/test/login.inc.php");
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return "exception";
}
try {
// Setup HttpURLConnection class to send and receive data from php and mysql
conn = (HttpURLConnection)url.openConnection();
conn.setReadTimeout(READ_TIMEOUT);
conn.setConnectTimeout(CONNECTION_TIMEOUT);
conn.setRequestMethod("POST");
// setDoInput and setDoOutput method depict handling of both send and receive
conn.setDoInput(true);
conn.setDoOutput(true);
// Append parameters to URL
Uri.Builder builder = new Uri.Builder()
.appendQueryParameter("username", params[0])
.appendQueryParameter("password", params[1]);
String query = builder.build().getEncodedQuery();
// Open connection for sending data
OutputStream os = conn.getOutputStream();
BufferedWriter writer = new BufferedWriter(
new OutputStreamWriter(os, "UTF-8"));
writer.write(query);
writer.flush();
writer.close();
os.close();
conn.connect();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
return "exception";
}
try {
int response_code = conn.getResponseCode();
// Check if successful connection made
if (response_code == HttpURLConnection.HTTP_OK) {
// Read data sent from server
InputStream input = conn.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(input));
StringBuilder result = new StringBuilder();
String line;
while ((line = reader.readLine()) != null) {
result.append(line);
}
// Pass data to onPostExecute method
return(result.toString());
}else{
return("unsuccessful");
}
} catch (IOException e) {
e.printStackTrace();
return "exception";
} finally {
conn.disconnect();
}
}
@Override
protected void onPostExecute(String result) {
//this method will be running on UI thread
pdLoading.dismiss();
if(result.equalsIgnoreCase("true"))
{
/* Here launching another activity when login successful. If you persist login state
use sharedPreferences of Android. and logout button to clear sharedPreferences.
*/
Intent intent = new Intent(MainActivity.this,SuccessActivity.class);
startActivity(intent);
MainActivity.this.finish();
}else if (result.equalsIgnoreCase("false")){
// If username and password does not match display a error message
Toast.makeText(MainActivity.this, "Email ou senha inálidos", Toast.LENGTH_LONG).show();
} else if (result.equalsIgnoreCase("exception") || result.equalsIgnoreCase("unsuccessful")) {
Toast.makeText(MainActivity.this, "OOPs! Houve algum problema na conexão.", Toast.LENGTH_LONG).show();
}
}
}
}
activity_main.xml
O arquivo xml para MainActivity.java .<?xml version="1.0" encoding="utf-8"?>
<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" android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity">
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="textEmailAddress"
android:ems="10"
android:id="@+id/email"
android:layout_alignParentTop="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:hint="Email"
android:layout_marginTop="10dp"/>
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="textPassword"
android:ems="10"
android:id="@+id/password"
android:layout_below="@+id/email"
android:hint="Password"
android:layout_marginTop="10dp"/>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="LOGIN"
android:id="@+id/button"
android:layout_below="@+id/password"
android:layout_marginTop="10dp"
android:onClick="checkLogin"/>
</RelativeLayout>
SuccessActivity.java
Esta atividade é lançada a partir de onPreExecute () método após o sucesso do login.package com.guru.login;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
public class SuccessActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_success);
}
}
activity_success.xml
O arquivo xml para SuccessActivity.java .<?xml version="1.0" encoding="utf-8"?>
<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" android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceLarge"
android:text="WELCOME"
android:id="@+id/textView"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:layout_marginTop="62dp" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceMedium"
android:text="Successfully LoggedIn"
android:id="@+id/textView2"
android:layout_marginTop="46dp"
android:layout_below="@+id/textView"
android:layout_centerHorizontal="true" />
</RelativeLayout>
AndroidManifest.xml
Não esqueça de adicionar usa permissão e SucessoAtividadepara o seu arquivo AndroidManifest.xml .<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.guru.login" >
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme" >
<activity android:name=".MainActivity" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".SuccessActivity" >
</activity>
</application>
Beleza pessoal espero ter ajudado!!..
Qualquer dúvida podem ficar a vontade.