Connecting Basic4Android (B4A) Application to PHP and MySQL Database

February 9, 2021

There are many tools for Android application development. Some of these tools are Android Studio, basic4android (B4A), Unity 3D. B4A is a tool for rapid application development developed by Anywhere Software. B4A is free and can be downloaded and installed from the official website.

Introduction

There has been an increase in mobile devices across the world. Organizations are now concentrating more on mobile application development to get more users or clients. This growth in mobile development means that information needs to be stored in more databases.

With stored data, there is easier service delivery from organization to their clients. B4A is an integrated development environment (IDE) used when developing Android mobile applications. B4A is based on visual basic coding techniques. PHP is a programming language used when developing server-side applications. MySQL is a relational database management tool (RDMS), that helps with database management.

Prerequisites

Before we begin, it would be useful for the reader to have the following:

  • A basic knowledge in SQL, PHP, and B4A programming.
  • A B4A application installed on a Windows computer. Follow the instructions in this article on how to install and configure B4A.
  • PHP and MySQL development environment: In this case, we will use Xampp.

Installing B4A

Installing Xampp

  • Download Xampp from the official website.
  • Click on the downloaded file and continue with the installation.

initializing-installation-window

  • Pick the components that we will use: MySQL and phpMyAdmin, and click Next.

Pick components

  • Select the folder you would like to install Xampp, and click Next.

Installation folder

  • Select the language, and click next.

Language

  • Click next, as shown in the screenshot below.

Features window

Ready to install window

  • Wait for the installation process.

Installation window

  • PHP files are kept in the Xampp directory in a folder called htdocs. For this application, we will create a folder called B4A-PHP. In the folder, we will store our PHP files inside Xampp htdocs folder.

  • Access the Xampp folder we have created in a network by getting a computer IP address with a folder name. In this case, to get the computer IP, we will run the following Windows CMD command.

ipconfig

Installation window

URL: http://192.168.100.118/B4A-PHP/api.php this URL needs to be changed to match yours.

  • We will use the URL above to connect our B4A application to the server (Xampp) for data exchange. The computer acting as the server and the phone should be on the same network.

URL

B4A application

So far, we have our development environment ready.

From B4A Application, click on File -> New -> Default to create a new project.

New B4A application

  • Choose a project path and enter the project name.

Project name

B4A CRUD operations

  • Let’s add a HTTP library that will enable connection to the host computer. The library is added through a window called Library manager. The Library manager is in the right corner of the B4A application.

Library manager

  • The application will do CRUD operations. We will create a layout with an editText and button, which we use to create CRUD operations.

Add layout

Save data in MySQL from the B4A application

B4A code

  • Add the code below to the manifest file to allow a network connection on Android 8 and above. This code will enable the network connection. For more details, check on this article.
   SetApplicationAttribute(android:usesCleartextTraffic, "true")
  • Let’s add a button in the design view and name it save. Right-click on the button in the design view to generate the Click event. The following code will be generated in the Main class.
Sub Save_Click
End Sub
  • Declare the HTTP, EditText, and URL variable in Global function, as shown below.
Sub Globals
    Dim savedata As HttpJob
    Private EditText1 As EditText
    Dim URL As String
End Sub
  • Initialize layout and URL.
Activity.LoadLayout("Layout")
'Link to where PHP file will be located
'Change URL to match yours
URL="http://192.168.100.118/B4A-PHP/api.php"

URL is the IP address with a PHP file or domain name with a PHP file to be accessed in the server.

  • Add the code below to initialize the HTTP variable in B4A. The code will communicate with the server or host where PHP files are kept.

Note: Two variables are posted save to indicate to PHP which code function will be executed. In this case, the save functionality will be executed. The editTextData variable carries the data to be saved in the database. The variable can be renamed to suit your naming format.

Sub Save_Click
    savedata.Initialize("savedata", Me)
    savedata.PostString(URL,"save=&editTextData="&EditText1.Text)
End Sub
  • Let’s add code to check if the connection is a success. The code captures the response from the specific request.
Sub JobDone (job As HttpJob)
'save data
Select job
        Case savedata
            If job.Success Then
                'success message
                ToastMessageShow("Saved",False)
                'Clear text in editText
                 EditText1.Text=""
            Else

                ToastMessageShow("Check your internet connection",False)
            End If

            savedata.Release
        End Select
End Sub

PHP code

  • Start the Xampp application, then click on Apache and MySQL. Once the port numbers appear, it will show the two services are running.
  • Click Admin under MySQL to start phpMyAdmin over the browser.
  • By default, it will not request for MySQL username and password.
  • Create a new database in phpMyadmin and name it b4a-php-db. This can be done by clicking the New, entering the database name, and clicking the Create button.

See the highlighted areas in the screenshot below.

Our database will be called b4a-php-db

Create Database

  • We need to create a table named student_name in the database b4a-php-db. With the database selected, navigate to the SQL tab in phpMyadmin and run the command below. This creates a new table named student_name.

Our table is called student_name

CREATE TABLE `b4a-php-db`.`student_name` ( `id` INT(10) NOT NULL AUTO_INCREMENT , `name` VARCHAR(20) NOT NULL , PRIMARY KEY (`id`)) ENGINE = InnoDB;
  • Create a PHP file to connect to the database and execute the insert SQL statement.
<?php
// change details below to fit your details

$servername = "localhost";      // Computer host
$username = "root";             // MySql username
$password = "";                  // MySQL password
$dbname = "b4a-php-db";          // Database name

// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
  die("Connection failed: " . $conn->connect_error);
}

// Check which function to execute
if(isset($_POST['save'])) {
    //sql statement to insert data
    $sql = "INSERT INTO student_name (name) VALUES ('".$_POST['editTextData']."' )";
    // execute to insert data
    if ($conn->query($sql) === TRUE) {
        die("Data saved");
    } else {
        die("Error: " . $sql . "<br>" . $conn->error);
    }
    $conn->close();
}
?>
  • When you click the button in the B4A application, the data is inserted into the database.

Read data from MySQL to B4A application

  • The code below is used to fetch data from the MySQL database to the B4A application. In this case, we will fetch only one entry. This is the first entry that was inserted into the table.

PHP code

<?php
// change details below to fit your details
$servername = "localhost";      // Computer host
$username = "root";             // MySQL username
$password = "";                  // MySQL password
$dbname = "b4a-php-db";          // Database name

// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
  die("Connection failed: " . $conn->connect_error);
}
// Check which function to execute
if(isset($_POST['fetch'])) {
    //sql statement to select data
    $sql = "SELECT name from student_name limit 1 ";
    // execute to select data
    $result = $conn->query($sql);

    if ($result->num_rows > 0) {
    // output data
        while($row = $result->fetch_assoc()) {
            die($row["name"]);
        }
    } else {
        die("No Data");
    }
    $conn->close();
}
?>

B4A code

  • Add the HTTP variable to support fetching data in global function.
Sub Globals
    Dim readdata As HttpJob
    Dim savedata As HttpJob
    Private EditText1 As EditText
    Dim URL As String
End Sub
  • Add another button in the designer and name it Read.
  • Right-click on the view and generate a click event.
Private Sub Read_Click

End Sub
  • The code below will be used to initialize the HTTP library in B4A. Through the library, B4A can communicate with the server or host where PHP files are located. The code will be executed when the Read button is clicked.

Note: One variable is posted to indicate the read function is executed in PHP.

Private Sub Read_Click
    readdata.Initialize("readdata", Me)
    readdata.PostString(URL,"fetch=")
End Sub
  • The code below will give a response on the connection status. Each request made to the server will have its response. Since we were saving information through our request, the saving PHP functionality will be executed.
Sub JobDone (job As HttpJob)
Select job
    'save data
        Case savedata
            If job.Success Then
                'success message
                ToastMessageShow("Saved",False)
                'Clear text in editText
                EditText1.Text=""
            Else

                ToastMessageShow("Check your Internet connection",False)
            End If

            savedata.Release
    'fetch data
        Case readdata
            If job.Success Then
                ' check if there is data from the response.
                If job.GetString.Length < 1 Then
                    'No data message
                    ToastMessageShow("No Data available",False)
                    Return
                End If
                'success message
                ToastMessageShow("Fetched",False)
                'set editText value to the one fetched from the database
                EditText1.Text=job.GetString
            Else

                ToastMessageShow("Check your Internet connection",False)
            End If

            readdata.Release
        End Select
End Sub

Update data from B4A application

B4A code

  • Add the HTTP variable to support any updating of the data in global function.
Sub Globals
    Dim updatedata As HttpJob
    Dim readdata As HttpJob
    Dim savedata As HttpJob
    Private EditText1 As EditText
    Dim URL As String
End Sub
  • Add another button in the designer and name it Update.
  • Right-click on the view and generate a click event.
Private Sub Update_Click

End Sub
  • Add a variable called prevData to store fetched data in the global function.
Sub Globals
    Dim updatedata As HttpJob
    Dim readdata As HttpJob
    Dim savedata As HttpJob
    Private EditText1 As EditText
    Dim URL As String
    Dim prevData As String
End Sub
  • The code below will initialize the HTTP variable in B4A. The code will also communicate with the server or host. The code will be executed when the Read button is clicked.

Note: Three variables are posted. One indicates the Update function will be executed in PHP. The editTextData new data that has been entered in the edittext. The prevData to be replaced in the database.

Private Sub Update_Click
    updatedata.Initialize("updatedata", Me)
    updatedata.PostString(URL,"update=&editTextData="&EditText1.Text&"&prevdata="&prevData)
End Sub
  • Let’s add code to check if the connection was a success. The code captures the response from the specific request. It has combined with the saving execution.
Sub JobDone (job As HttpJob)
Select job

    'save data
        Case savedata
            If job.Success Then
                'success message
                ToastMessageShow("Saved",False)
                'Clear text in editText
                EditText1.Text=""
            Else

                ToastMessageShow("Check your Internet connection",False)
            End If

            savedata.Release
    'fetch data
        Case readdata
            If job.Success Then
            ' check if there is data from the response
                If job.GetString.Length < 1 Then
                    'No data message
                    ToastMessageShow("No Data available",False)
                    Return
                End If
                'success message
                ToastMessageShow("Fetched",False)
                'set editText value to the one fetched from the database
                EditText1.Text=job.GetString
                prevData= EditText1.Text
            Else

                ToastMessageShow("Check your Internet connection",False)
            End If

            readdata.Release

            'update data
        Case updatedata
            If job.Success Then
                'success message
                ToastMessageShow("Updated",False)
            Else

                ToastMessageShow("Check your Internet connection",False)
            End If

            updatedata.Release
        End Select
End Sub

PHP code

<?php
// change details below to fit your details

$servername = "localhost";      // Computer host
$username = "root";             // MySql username
$password = "";                  // MySQL password
$dbname = "b4a-php-db";          // Database name

// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
  die("Connection failed: " . $conn->connect_error);
}

// Check which function to execute
if(isset($_POST['update'])) {
    //sql statement to select data
    $sql = "UPDATE student_name SET name='".$_POST['editTextData']."' WHERE name='".$_POST['prevData']."'";
    //execute update statement
    if ($conn->query($sql) === TRUE) {
        die ("Updated");
    } else {
        die( "Error: " . $conn->error);
    }
    $conn->close();
}
?>

Delete data from B4A application

B4A code

  • Add the HTTP variable to support any deleting of data in a global function.
Sub Globals
    Dim deletedata As HttpJob
    Dim updatedata As HttpJob
    Dim readdata As HttpJob
    Dim savedata As HttpJob
    Private EditText1 As EditText
    Dim URL As String
    Dim prevData As String
End Sub
  • Add another button in the designer and name it Delete.
  • Right-click on the view and generate a click event.
Private Sub Delete_Click

End Sub
  • The code below will initialize the HTTP library. With library initialized, B4A communicates with the server or host. When the delete button is clicked, the delete functionality will be executed.

Note: Two variables are posted. One variable that indicates the delete function will be executed in PHP. The editTextData data that has been entered in the EditText1. Text is data to be deleted in the database.

Private Sub Delete_Click
    deletedata.Initialize("deletedata", Me)
    deletedata.PostString(URL,"delete=&editTextData="&EditText1.Text)
End Sub
  • Add this code snippet to check if the connection was a success. The code captures the response from the specific request.
Sub JobDone (job As HttpJob)
Select job
    'save data
        Case savedata
            If job.Success Then
                'success message
                ToastMessageShow("Saved",False)
                'Clear text in editText
                EditText1.Text=""
            Else
                ToastMessageShow("Check your Internet connection",False)
            End If

            savedata.Release
    'fetch data
        Case readdata
            If job.Success Then
                ' check if there is data from the response
                If job.GetString.Length < 1 Then
                    'No data message
                    ToastMessageShow("No Data available",False)
                    Return
                End If
                'success message
                ToastMessageShow("Fetched",False)
                'set editText value to the one fetched from the database
                EditText1.Text=job.GetString
                prevData= EditText1.Text
            Else

                ToastMessageShow("Check your Internet connection",False)
            End If

            readdata.Release

            'update data
        Case updatedata
            If job.Success Then
                'success message
                ToastMessageShow("Updated",False)
            Else

                ToastMessageShow("Check your Internet connection",False)
            End If

            updatedata.Release
            'delete data
        Case deletedata
            If job.Success Then
                'success message
                ToastMessageShow("Deleted",False)
            Else

                ToastMessageShow("Check your Internet connection",False)
            End If

            deletedata.Release
        End Select
End Sub

PHP code

<?php

// change details below to fit your details.

$servername = "localhost";      // Computer host
$username = "root";             // MySql username
$password = "";                  // MySQL password
$dbname = "b4a-php-db";          // Database name

// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
  die("Connection failed: " . $conn->connect_error);
}

// Check which function to execute
if(isset($_POST['delete'])) {

    //sql statement to select data
    $sql = "Delete from student_name where name='".$_POST['editTextData']."'";

    //execute delete statement
    if ($conn->query($sql) === TRUE) {
        die("Deleted");
    } else {
        die("Error: " . $conn->error);
    }

    $conn->close();
}
?>

You can find the complete source code on GitHub. You can also find more example projects in the B4A community.

Conclusion

In this article we have looked at creating a B4A application that communicates with the database using PHP from the article. We also have:

  • Installed Xampp.
  • Created a database.
  • Created a simple B4A application.
  • Stored data into the database.
  • Fetched data from the database.
  • Created a PHP script that communicates with the database.

Peer Review Contributions by: Benson Kariuki


About the author

Sylvester Tamba

Sylvester Tamba is pursuing a Masters in Technology Management at University of Nairobi. He is passionate about training and becoming a skilled Software Developer. He is also interested in Blockchain Technology and Health Informatics. When he is not coding, he loves hiking and exercising.

This article was contributed by a student member of Section's Engineering Education Program. Please report any errors or innaccuracies to enged@section.io.