Create/develop simple login application in android using wamp server and MySQL databases.
In this tutorial we will create a simple login application using wamp server and MySQL databases.
We will use Retrofit library for server communication.
So lets start
1. Run wamp server and open phpMyAdmin home page
2. Create a databases and name it "simple_login_app_db"
3. Execute following query to create 'users' table
CREATE TABLE IF NOT EXISTS `users` (
id` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(200) NOT NULL,
`password` text NOT NULL,
PRIMARY KEY (`id`)
)
4. Insert a record5. Now go to 'C:\wamp64\www', create a project/folder and give name 'simple_login_app'Create two .php files, connect.php & login.phpi. Copy below code in connect.php file
ini_set('display_errors',0);
date_default_timezone_set('Asia/Karachi');
$servername = "localhost";
$username = "root";
$password = "";
try {
$conn = new PDO("mysql:host=$servername;dbname=simple_login_app_db", $username, $password);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}catch(PDOException $e){
echo "Connection failed: " . $e->getMessage();
}
ii. Copy below code in login.php
php
header('Content-type: application/json');
include_once('connect.php');
$response=array();
if ( isset($_REQUEST['username']) & isset($_REQUEST['password']) ){
$username = $_REQUEST['username'];
$password = md5( $_REQUEST['password'] );
$stmt = $conn->prepare("SELECT * FROM `users` WHERE username='$username' AND password = '$password' ");
$stmt->execute();
$stmt->setFetchMode(PDO::FETCH_OBJ);
$row = $stmt->fetch();
if($row->id != ""){
$response['id']= $row->id;
$response['username']= $row->username;
$response["success"] = 1;
$response["message"] = "Logged in successfully";
}else{
$response["success"] = 0;
$response["message"] = "Invalid username or password";
}
}else{
$response["success"] = 0;
$response["message"] = "Required field(s) is missing";
}
echo json_encode($response);
6. Create a project in android studio and give name "SimpleLoginApp". 7. Rename MainActivity to LoginActivity (Optional) and past below code.
import android.os.Bundle import android.util.Log import android.widget.TextView import android.widget.Toast import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.widget.AppCompatButton import com.google.android.material.textfield.TextInputLayout import com.google.gson.JsonObject import retrofit2.Call import retrofit2.Callback import retrofit2.Response class LoginActivity : AppCompatActivity() { private lateinit var userNameField: TextInputLayout private lateinit var passwordField: TextInputLayout private lateinit var loginBtn: AppCompatButton private lateinit var messageFromServerTextView: TextView private var messageFromServer = "" override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.login_activity) messageFromServerTextView = findViewById(R.id.message_from_server) userNameField = findViewById(R.id.username) passwordField = findViewById(R.id.password) loginBtn = findViewById(R.id.login_btn) loginBtn!!.setOnClickListener { loginFunc(userNameField.editText!!.text.toString(), passwordField.editText!!.text.toString()) } } private fun loginFunc(username: String, password: String) { val userServiceInterface = RetrofitClient.getRetrofitInstance().create(UserServiceInterface::class.java) val call = userServiceInterface.login(username, password) call?.enqueue(object : Callback
{ override fun onResponse(call: Call , response: Response ) { if (response.isSuccessful) { val jsonObject = response.body()!!.asJsonObject messageFromServer = jsonObject.get("message").toString() //if (jsonObject.get("message").toString().contains("Logged in successfully")){ } }else { messageFromServer = response.message().toString() } messageFromServerTextView.text = messageFromServer Toast.makeText(this@LoginActivity, messageFromServer, Toast.LENGTH_LONG).show() Log.i("server response", messageFromServer) } override fun onFailure(call: Call , t: Throwable) { messageFromServer = t.message.toString() messageFromServerTextView.text = messageFromServer Toast.makeText(this@LoginActivity, messageFromServer, Toast.LENGTH_LONG).show() Log.i("server response", messageFromServer) } }) } } 8. Create a class "RetrofitClient" and copy below code
import retrofit2.Retrofit;
import retrofit2.converter.gson.GsonConverterFactory;
public class RetrofitClient {
public static final String URL_LOGIN = "http://192.168.00.00/simple_login_app/";
private static Retrofit retrofit = null;
public static Retrofit getRetrofitInstance(){
if(retrofit == null){
retrofit = new Retrofit.Builder()
.baseUrl(URL_LOGIN)
.addConverterFactory(GsonConverterFactory.create())
.build();
}
return retrofit;
}
}
9. Create an interface "UserServiceInterface" and copy below code.
import com.google.gson.JsonObject;
import retrofit2.Call;
import retrofit2.http.Field;
import retrofit2.http.FormUrlEncoded;
import retrofit2.http.POST;
public interface UserServiceInterface {
@FormUrlEncoded
@POST("login.php")
Call login(
@Field("username") String username,
@Field("password") String password
);
}
10. Open 'manifest' file and add following permission.
uses-permission android:name="android.permission.INTERNET"
11. Open 'build.gradle' file and add following dependencies.
implementation 'com.squareup.retrofit2:retrofit:2.9.0'
implementation 'com.squareup.retrofit2:converter-gson:2.9.0'
implementation 'com.google.code.gson:gson:2.8.6'
12. Go to layout folder and copy below code in the login_activity.xml.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
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:orientation="vertical"
tools:context=".LoginActivity"
>
<TextView
android:layout_gravity="center_horizontal"
android:layout_marginTop="50dp"
android:textStyle="bold"
android:textSize="32sp"
android:text="Simple Login App"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<LinearLayout
android:layout_marginTop="20dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="30dp">
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/username"
style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Username">
<com.google.android.material.textfield.TextInputEditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="text" />
</com.google.android.material.textfield.TextInputLayout>
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/password"
android:layout_marginTop="10dp"
style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Password">
<com.google.android.material.textfield.TextInputEditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="textPassword" />
</com.google.android.material.textfield.TextInputLayout>
<androidx.appcompat.widget.AppCompatButton
android:id="@+id/login_btn"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:background="@color/purple_500"
android:textColor="@color/white"
android:text="Login" />
</LinearLayout>
<TextView
android:layout_margin="10dp"
android:id="@+id/message_from_server"
android:layout_gravity="center_horizontal"
android:textSize="24dp"
android:layout_marginTop="30dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</LinearLayout>
Now your code is ready. Run it. Following UI should be shown.Note: Replace IP address in RetrofitClient class with your machine address.
Watch the video for practical implementation
That's it. Thank you