Android development with php

Android — PHP/MYSQL

In this chapter , we are going to explain, how you can integrate PHP and MYSQL with your android application. This is very useful in case you have a webserver, and you want to access its data on your android application.

MYSQL is used as a database at the webserver and PHP is used to fetch data from the database. Our application will communicate with the PHP page with necessary parameters and PHP will contact MYSQL database and will fetch the result and return the results to us.

PHP — MYSQL

Creating Database

MYSQL database can be created easily using this simple script. The CREATE DATABASE statement creates the database.

Creating Tables

Once database is created, its time to create some tables in the database. The CREATE TABLE statement creates the database.

Inserting Values in tables

When the database and tables are created. Now its time to insert some data into the tables. The Insert Into statement creates the database.

PHP — GET and POST methods

PHP is also used to fetch the record from the mysql database once it is created. In order to fetch record some information must be passed to PHP page regarding what record to be fetched.

The first method to pass information is through GET method in which $_GET command is used. The variables are passed in the url and the record is fetched. Its syntax is given below −

 $username = $_GET['username']; $password = $_GET['password']; $result = mysqli_query($con,"SELECT Role FROM table1 where Username='$username' and Password='$password'"); $row = mysqli_fetch_array($result); $data = $row[0]; if($data) < echo $data; >mysqli_close($con); ?>

The second method is to use POST method. The only change in the above script is to replace $_GET with $_POST. In Post method, the variables are not passed through URL.

Android — Connecting MYSQL

Connecting Via Get Method

There are two ways to connect to MYSQL via PHP page. The first one is called Get method. We will use HttpGet and HttpClient class to connect. Their syntax is given below −

URL url = new URL(link); HttpClient client = new DefaultHttpClient(); HttpGet request = new HttpGet(); request.setURI(new URI(link));

After that you need to call execute method of HttpClient class and receive it in a HttpResponse object. After that you need to open streams to receive the data.

HttpResponse response = client.execute(request); BufferedReader in = new BufferedReader (new InputStreamReader(response.getEntity().getContent()));

Connecting Via Post Method

In the Post method, the URLEncoder,URLConnection class will be used. The urlencoder will encode the information of the passing variables. It’s syntax is given below −

URL url = new URL(link); String data = URLEncoder.encode("username", "UTF-8") + "=" + URLEncoder.encode(username, "UTF-8"); data += "&" + URLEncoder.encode("password", "UTF-8") + "=" + URLEncoder.encode(password, "UTF-8"); URLConnection conn = url.openConnection();

The last thing you need to do is to write this data to the link. After writing, you need to open stream to receive the responded data.

OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream()); wr.write( data ); BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));

Example

The below example is a complete example of connecting your android application with MYSQL database via PHP page. It creates a basic application that allows you to login using GET and POST method.

Читайте также:  Hover css для кнопки

PHP — MYSQL part

In this example a database with the name of temp has been created at 000webhost.com. In that database, a table has been created with the name of table1. This table has three fields. (Username, Password, Role). The table has only one record which is («admin»,»admin»,»administrator»).

The php page has been given below which takes parameters by post method.

 $username = $_POST['username']; $password = $_POST['password']; $result = mysqli_query($con,"SELECT Role FROM table1 where Username='$username' and Password='$password'"); $row = mysqli_fetch_array($result); $data = $row[0]; if($data) < echo $data; >mysqli_close($con); ?>

Android Part

To experiment with this example , you need to run this on an actual device on which wifi internet is connected.

Steps Description
1 You will use Android studio IDE to create an Android application and name it as PHPMYSQL under a package com.example.phpmysql.
2 Modify src/MainActivity.java file to add Activity code.
3 Create src/SiginActivity.java file to add PHPMYSQL code.
4 Modify layout XML file res/layout/activity_main.xml add any GUI component if required.
5 Modify res/values/string.xml file and add necessary string components.
6 Modify AndroidManifest.xml to add necessary permissions.
7 Run the application and choose a running android device and install the application on it and verify the results.

Here is the content of src/com.example.phpmysql/MainActivity.java.

package com.example.phpmysql; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.widget.EditText; import android.widget.TextView; public class MainActivity extends Activity < private EditText usernameField,passwordField; private TextView status,role,method; @Override protected void onCreate(Bundle savedInstanceState) < super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); usernameField = (EditText)findViewById(R.id.editText1); passwordField = (EditText)findViewById(R.id.editText2); status = (TextView)findViewById(R.id.textView6); role = (TextView)findViewById(R.id.textView7); method = (TextView)findViewById(R.id.textView9); >public void login(View view) < String username = usernameField.getText().toString(); String password = passwordField.getText().toString(); method.setText("Get Method"); new SigninActivity(this,status,role,0).execute(username,password); >public void loginPost(View view) < String username = usernameField.getText().toString(); String password = passwordField.getText().toString(); method.setText("Post Method"); new SigninActivity(this,status,role,1).execute(username,password); >>

Here is the content of src/com.example.phpmysql/SigninActivity.java.

package com.example.phpmysql; import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.net.URI; import java.net.URL; import java.net.URLConnection; import java.net.URLEncoder; import org.apache.http.HttpResponse; import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.client.DefaultHttpClient; import android.content.Context; import android.os.AsyncTask; import android.widget.TextView; public class SigninActivity extends AsyncTask < private TextView statusField,roleField; private Context context; private int byGetOrPost = 0; //flag 0 means get and 1 means post.(By default it is get.) public SigninActivity(Context context,TextView statusField,TextView roleField,int flag) < this.context = context; this.statusField = statusField; this.roleField = roleField; byGetOrPost = flag; >protected void onPreExecute() < >@Override protected String doInBackground(String. arg0) < if(byGetOrPost == 0)< //means by Get Method try< String username = (String)arg0[0]; String password = (String)arg0[1]; String link = "http://myphpmysqlweb.hostei.com/login.php?username="+username+"& password="+password; URL url = new URL(link); HttpClient client = new DefaultHttpClient(); HttpGet request = new HttpGet(); request.setURI(new URI(link)); HttpResponse response = client.execute(request); BufferedReader in = new BufferedReader(new InputStreamReader(response.getEntity().getContent())); StringBuffer sb = new StringBuffer(""); String line=""; while ((line = in.readLine()) != null) < sb.append(line); break; >in.close(); return sb.toString(); > catch(Exception e) < return new String("Exception: " + e.getMessage()); >> else < try< String username = (String)arg0[0]; String password = (String)arg0[1]; String link="http://myphpmysqlweb.hostei.com/loginpost.php"; String data = URLEncoder.encode("username", "UTF-8") + "=" + URLEncoder.encode(username, "UTF-8"); data += "&" + URLEncoder.encode("password", "UTF-8") + "=" + URLEncoder.encode(password, "UTF-8"); URL url = new URL(link); URLConnection conn = url.openConnection(); conn.setDoOutput(true); OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream()); wr.write( data ); wr.flush(); BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream())); StringBuilder sb = new StringBuilder(); String line = null; // Read Server Response while((line = reader.readLine()) != null) < sb.append(line); break; >return sb.toString(); > catch(Exception e) < return new String("Exception: " + e.getMessage()); >> > @Override protected void onPostExecute(String result) < this.statusField.setText("Login Successful"); this.roleField.setText(result); >>

Add the following content to build.gradle and rebuild the whole project.

Читайте также:  Html style all elements

Here is the content of activity_main.xml.

Here is the content of Strings.xml.

  PHPMYSQL Settings Hello world! Username Password Login - Get Login - Post Login Application Login Status Login Role Not login Not assigned Login Method Choose Method  

Here is the content of AndroidManifest.xml.

Eclipse Run Icon

Let’s try to run your PHPMYSQL application. I assume you have connected your actual Android Mobile device with your computer. To run the app from Android studio, open one of your project’s activity files and click Run icon from the tool bar. Before starting your application, Android studio will display following window to select an option where you want to run your Android application.

Anroid PHP/MySQL Tutorial

Select your mobile device as an option and then check your mobile device which will display following screen −

Anroid PHP/MySQL Tutorial

Now just type in your username and password. In my case i am typing admin as username and password. It is shown in the figure −

Anroid PHP/MySQL Tutorial

Now press the Get button and wait a few seconds and response will be downloaded and will be shown to you. In this case, the response is the ROLE that is fetched in case of admin as username and password.It is shown in the figure below −

Anroid PHP/MySQL Tutorial

Now again press the POST button and same result would appear. It is shown in the figure below −

Источник

Как создать android приложение на php (+ html + js + css)

Статья адресована людям, занимающимся разработкой на PHP, у которых возникла необходимость по быстрому сделать android-приложение для личного пользования.

Прежде всего хочется обратиться к профессиональным разработчикам android-приложений и к людям не занимающимся вообще никакой разработкой.

Это НЕ статья о том как профессионально разрабатывать android приложения. Если вы не профессионал и ничего не знаете о профессиональной разработке android приложений, но хотите им стать, вам не надо это читать.

Если вы профессиональный разработчик android приложений, вы не найдёте здесь ничего интересного.

Приложение может стать вполне рабочим, например вот это в Google Play опубликовано без проблем. (Скачиваний маловато, но я не задавался целью раскрутить приложение, я создал его для своих нужд, а ссылка на маркете позволяет легко им делиться с друзьями).

Наверное, невозможно найти разработчика на PHP, который категорически не смог бы сверстать в HTML требуемый ему интерфейс, оживить его с помощью javascript и придать нужный ему вид с помощью css.

Читайте также:  Несколько картинок фоном css

Не все из нас смогут сделать то же самое работая на заказ, требования к фронтенду современных продакшен сайтов могут оказаться трудновыполнимыми, а порой и вообще непонятными.

С другой стороны, когда нам нужен какой-то web-интерфейс для личного пользования, мы с лёгкостью его реализуем используя весь этот html/js/css так, как будто мы всю жизнь только фронтендом и занимались.

Думаю, ни для кого не секрет, что можно сделать android приложение c webView и поместить в него ваш HTML5 интерфейс, но как взаимодействовать с устройством?

Взаимодействие с устройством осуществляется добавлением программного интерфейса в виде объекта javascript. Вызывая методы этого объекта программист может из webView взаимодействовать например с файловой системой устройства, делать в принципе всё, что позволяют методы этого объекта, реализованные на языке Java.

Мне, как человеку много лет кодившим на php и иногда на javascript показалось очень удобным иметь в своём js коде объект с именем PHP и обеспечивающим как можно большее количество php функций, вызывая которые я мог бы например работать с файлами устройства, оперировать функцией date и другими.

Конечно, реализовать все PHP функции маловероятно, но мне это и не надо, буду добавлять по мере необходимости.

Сейчас реализованы вот такие функции ссылка на исходный код PHPInterface

Репозиторий на гитхаб в котором этот класс будет время от времени обновляться и совершенствоваться.

Как подтверждение, что это вполне жизнеспособная библиотека вот исходный код android приложения опубликованного на маркете.

Ниже описаны особенности реализованых методов (если метод работает полностью совместимо с стандартной функцийе php его нет в этой таблице).

Метод Особенности
file_get_contents На данным момент принимает только короткие имена файлов (например «file.txt» ). Созданный файл будет доступен только тому приложению, которое его создало. Планируется в дальнейшем поддержка полных имён файлов, например «/mnt/sdcard/app/data/file.txt» .
file_exists См. file_get_contents
file_put_contents См. file_get_contents . Также, надо иметь ввиду, что при использовании констант, например FILE_APPEND , нужно использовать PHPInterface.FILE_APPEND ;
str_replace( String search, String replace, String subject, boolean getCount) В отличии от оргигнальной php функции, если нам нужно количество замен, мы не передаём переменную по ссылке, а указываем вместо неё true. Тогда PHPInterface.STR_REPLACE_COUNT будет содержать количество замен после вызова метода.
in_array(needle, haystack) Пока работает только с массивами строк и целых чисел ( long и int )
strval Пока работает только с аргументами типа long и int
count Не работает с простыми типами java (такими как long и int ), только с теми, которые наследуются от Object

Список методов, реализванных на 2019-05-30

  • Методы PHPInterface
  • count
  • date
  • file_get_contents
  • file_exists
  • file_put_contents
  • in_array
  • intval
  • str_replace
  • strlen
  • strval
  • time

Примеры использования в java коде:

 public class MainActivity extends Activity < public PHPInterface PHP; public void foo() < PHP = new PHPInterface(this.getApplicationContext()); long currentTimestamp = PHP.time(); >> 

или, если нужен при работе приложения в фоне:

 public class ServiceDM extends Service < public PHPInterface PHP; public void foo() < PHP = new PHPInterface(this); long currentTimestamp = PHP.time(); >> 

Пример использования в javascript коде:

 //Практически в любом месте js загруженного в webView var currentTimestamp = PHP.time(); PHP.file_put_contents('time_of_start.txt', currentTimestamp); 

Источник

Оцените статью