Thứ Năm, 1 tháng 11, 2018

Android - PHP / MYSQL

Trong chương này, chúng tôi sẽ giải thích, làm thế nào bạn có thể tích hợp PHP và MYSQL với ứng dụng Android của bạn. Điều này rất hữu ích trong trường hợp bạn có một máy chủ web, và bạn muốn truy cập dữ liệu của nó trên ứng dụng Android của bạn.

MYSQL được sử dụng như một cơ sở dữ liệu tại máy chủ web và PHP được sử dụng để lấy dữ liệu từ cơ sở dữ liệu. Ứng dụng của chúng ta sẽ giao tiếp với trang PHP với các tham số cần thiết và PHP sẽ liên hệ với cơ sở dữ liệu MYSQL và sẽ lấy kết quả và trả về kết quả cho chúng ta.

PHP - MYSQL

Tạo cơ sở dữ liệu

Cơ sở dữ liệu MYSQL có thể được tạo dễ dàng bằng cách sử dụng tập lệnh đơn giản này. Câu lệnh CREATE DATABASE tạo cơ sở dữ liệu.

Link đăng ký khóa học : Học lập trình Android cơ bản.
<?php
   $con=mysqli_connect("example.com","username","password");
   $sql="CREATE DATABASE my_db";
   if (mysqli_query($con,$sql)) {
      echo "Database my_db created successfully";
   }
?>

Tạo bảng

Một khi cơ sở dữ liệu được tạo, thời gian của nó để tạo ra một số bảng trong cơ sở dữ liệu. Câu lệnh CREATE TABLE tạo cơ sở dữ liệu.
<?php
   $con=mysqli_connect("example.com","username","password","my_db");
   $sql="CREATE TABLE table1(Username CHAR(30),Password CHAR(30),Role CHAR(30))";
   if (mysqli_query($con,$sql)) {
      echo "Table have been created successfully";
   }
?>

Chèn giá trị vào bảng

Khi cơ sở dữ liệu và bảng được tạo ra. Bây giờ là lúc để chèn một số dữ liệu vào các bảng. Câu lệnh Insert Into tạo cơ sở dữ liệu.
<?php
   $con=mysqli_connect("example.com","username","password","my_db");
   $sql="INSERT INTO table1 (FirstName, LastName, Age) VALUES ('admin', 'admin','adminstrator')";
   if (mysqli_query($con,$sql)) {
      echo "Values have been inserted successfully";
   }
?>

PHP - phương thức GET và POST

PHP cũng được sử dụng để lấy bản ghi từ cơ sở dữ liệu mysql khi nó được tạo ra. Để tìm nạp bản ghi, một số thông tin phải được chuyển đến trang PHP liên quan đến bản ghi nào cần tìm nạp.

Phương thức đầu tiên để truyền thông tin là thông qua phương thức GET trong đó lệnh $ _GET được sử dụng. Các biến được chuyển vào url và bản ghi được tìm nạp. Cú pháp của nó được đưa ra dưới đây
<?php
   $con=mysqli_connect("example.com","username","password","database name");

   if (mysqli_connect_errno($con)) {
      echo "Failed to connect to MySQL: " . mysqli_connect_error();
   }

   $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);
?>
Phương pháp thứ hai là sử dụng phương thức POST. Thay đổi duy nhất trong kịch bản trên là thay thế $ _GET bằng $ _POST . Trong phương thức Post, các biến không được truyền qua URL.

Android - Kết nối MYSQL

Kết nối Via Get Method

Có hai cách để kết nối với MYSQL thông qua trang PHP. Phương thức đầu tiên được gọi là Nhận phương thức . Chúng ta sẽ sử dụng lớp HttpGet và HttpClient để kết nối. Cú pháp của họ được đưa ra dưới đây
URL url = new URL(link);
HttpClient client = new DefaultHttpClient();
HttpGet request = new HttpGet();
request.setURI(new URI(link));
Sau đó bạn cần gọi phương thức execute của lớp HttpClient và nhận nó trong một đối tượng HttpResponse. Sau đó, bạn cần mở luồng để nhận dữ liệu.
HttpResponse response = client.execute(request);
BufferedReader in = new BufferedReader
(new InputStreamReader(response.getEntity().getContent()));

Kết nối qua phương thức đăng bài

Trong phương thức Post, lớp URLEncoder , URLConnection sẽ được sử dụng. Các urlencoder sẽ mã hóa thông tin của các biến đi qua. Cú pháp của nó được đưa ra dưới đây
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(); 
Điều cuối cùng bạn cần làm là ghi dữ liệu này vào liên kết. Sau khi viết, bạn cần mở luồng để nhận dữ liệu trả lời.
OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream()); 
wr.write( data ); 
BufferedReader reader = new BufferedReader(new 
InputStreamReader(conn.getInputStream()));   
Ví dụ dưới đây là một ví dụ hoàn chỉnh về kết nối ứng dụng Android của bạn với cơ sở dữ liệu MYSQL thông qua trang PHP. Nó tạo ra một ứng dụng cơ bản cho phép bạn đăng nhập bằng phương thức GET và POST.

PHP - Phần MYSQL

Trong ví dụ này, một cơ sở dữ liệu với tên temp đã được tạo ra tại 000webhost.com. Trong cơ sở dữ liệu đó, một bảng đã được tạo ra với tên của table1. Bảng này có ba trường. (Tên người dùng, Mật khẩu, Vai trò). Bảng chỉ có một bản ghi là ("quản trị", "quản trị viên", "quản trị viên").

Các trang php đã được đưa ra dưới đây có tham số bằng phương pháp bài.
<?php
   $con=mysqli_connect("mysql10.000webhost.com","username","password","db_name");

   if (mysqli_connect_errno($con)) {
      echo "Failed to connect to MySQL: " . mysqli_connect_error();
   }
 
   $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);
?>
Phần Android

Để thử nghiệm với ví dụ này, bạn cần chạy trên thiết bị thực tế mà internet wifi được kết nối.

Các bướcSự miêu tả
1Bạn sẽ sử dụng Android studio IDE để tạo một ứng dụng Android và đặt tên nó là PHPMYSQL theo một gói com.example.phpmysql.
2Sửa đổi tệp src / MainActivity.java để thêm mã Hoạt động.
3Tạo tệp src / SiginActivity.java để thêm mã PHPMYSQL.
4Sửa đổi tệp XML bố trí res / layout / activity_main.xml thêm bất kỳ thành phần GUI nào nếu cần.
5Sửa đổi tệp res / values ​​/ string.xml và thêm các thành phần chuỗi cần thiết.
6Sửa đổi AndroidManifest.xml để thêm các quyền cần thiết.
7Chạy ứng dụng và chọn một thiết bị Android đang chạy và cài đặt ứng dụng trên đó và xác minh kết quả.
Đây là nội dung của 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);
   }
}
Đây là nội dung của 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);
   }
}
Thêm nội dung sau vào build.gradle và xây dựng lại toàn bộ dự án.
android {
   useLibrary 'org.apache.http.legacy'
}
Đây là nội dung của activity_main.xml .
<?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:paddingBottom="@dimen/activity_vertical_margin"
   android:paddingLeft="@dimen/activity_horizontal_margin"
   android:paddingRight="@dimen/activity_horizontal_margin"
   android:paddingTop="@dimen/activity_vertical_margin"
   tools:context=".MainActivity" >

   <EditText
      android:id="@+id/editText2"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:layout_alignRight="@+id/editText1"
      android:layout_below="@+id/editText1"
      android:layout_marginTop="25dp"
      android:ems="10"
      android:inputType="textPassword" >
   </EditText>

   <EditText
      android:id="@+id/editText1"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:layout_alignParentRight="true"
      android:layout_alignParentTop="true"
      android:layout_marginTop="44dp"
      android:ems="10" >

   <requestFocus android:layout_width="wrap_content" />

   </EditText>

   <TextView
      android:id="@+id/textView1"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:layout_alignBottom="@+id/editText1"
      android:layout_alignParentLeft="true"
      android:text="@string/Username" />

   <TextView
      android:id="@+id/textView3"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:layout_alignParentTop="true"
      android:layout_centerHorizontal="true"
      android:text="@string/App"
      android:textAppearance="?android:attr/textAppearanceLarge" />

   <TextView
      android:id="@+id/textView7"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:layout_alignBottom="@+id/textView5"
      android:layout_alignLeft="@+id/textView6"
      android:text="@string/Role"
      android:textAppearance="?android:attr/textAppearanceMedium"
      android:textSize="10sp" />

   <TextView
      android:id="@+id/textView5"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:layout_below="@+id/textView6"
      android:layout_marginTop="27dp"
      android:layout_toLeftOf="@+id/editText1"
      android:text="@string/LoginRole" />
   <TextView
      android:id="@+id/textView8"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:layout_above="@+id/textView6"
      android:layout_alignLeft="@+id/textView5"
      android:layout_marginBottom="27dp"
      android:text="@string/method" />

   <TextView
      android:id="@+id/textView4"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:layout_alignLeft="@+id/textView8"
      android:layout_below="@+id/button1"
      android:layout_marginTop="86dp"
      android:text="@string/LoginStatus" />


   <TextView
      android:id="@+id/textView6"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:layout_alignTop="@+id/textView4"
      android:layout_centerHorizontal="true"
      android:text="@string/Status"
      android:textAppearance="?android:attr/textAppearanceMedium"
      android:textSize="10sp" />

   <TextView
      android:id="@+id/textView9"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:layout_alignBottom="@+id/textView8"
      android:layout_alignLeft="@+id/textView6"
      android:text="@string/Choose"
      android:textAppearance="?android:attr/textAppearanceMedium"
      android:textSize="10sp" />

   <Button
      android:id="@+id/button2"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:layout_centerVertical="true"
      android:layout_toRightOf="@+id/textView6"
      android:onClick="loginPost"
      android:text="@string/LoginPost" />

   <Button
      android:id="@+id/button1"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:layout_alignBaseline="@+id/button2"
      android:layout_alignBottom="@+id/button2"
      android:layout_alignLeft="@+id/textView2"
      android:onClick="login"
      android:text="@string/LoginGet" />

   <TextView
      android:id="@+id/textView2"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:layout_alignBaseline="@+id/editText2"
      android:layout_alignBottom="@+id/editText2"
      android:layout_alignParentLeft="true"
      android:text="@string/Password" />

</RelativeLayout>
Đây là nội dung của Strings.xml .
<?xml version="1.0" encoding="utf-8"?>
<resources>

   <string name="app_name">PHPMYSQL</string>
   <string name="action_settings">Settings</string>
   <string name="hello_world">Hello world!</string>
   <string name="Username">Username</string>
   <string name="Password">Password</string>
   <string name="LoginGet">Login - Get</string>
   <string name="LoginPost">Login - Post</string>
   <string name="App">Login Application</string>
   <string name="LoginStatus">Login Status</string>
   <string name="LoginRole">Login Role</string>
   <string name="Status">Not login</string>
   <string name="Role">Not assigned</string>
   <string name="method">Login Method</string>
   <string name="Choose">Choose Method</string>
 
</resources>
Đây là nội dung của AndroidManifest.xml .
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
   package="com.example.phpmysql" >

      <uses-permission android:name="android.permission.INTERNET"/>
      <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
      
   <application
      android:allowBackup="true"
      android:icon="@drawable/ic_launcher"
      android:label="@string/app_name"
      android:theme="@style/AppTheme" >
      
      <activity
         android:name="com.example.phpmysql.MainActivity"
         android:label="@string/app_name" >
         
         <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
         </intent-filter>
         
      </activity>
      
   </application>
</manifest>
Hãy thử chạy ứng dụng PHPMYSQL của bạn. Tôi cho rằng bạn đã kết nối thiết bị Android Mobile thực tế với máy tính của mình.

Để chạy ứng dụng từ Android studio, hãy mở một trong các tệp hoạt động của dự án của bạn và nhấp vào Chạy biểu tượng từ thanh công cụ.

Trước khi bắt đầu ứng dụng của bạn, Android studio sẽ hiển thị cửa sổ sau để chọn tùy chọn mà bạn muốn chạy ứng dụng Android của mình.

Học lập trình Android cơ bản

Chọn thiết bị di động của bạn làm tùy chọn và sau đó kiểm tra thiết bị di động của bạn sẽ hiển thị màn hình sau đây

Bây giờ, chỉ cần nhập tên người dùng và mật khẩu của bạn. Trong trường hợp của tôi, tôi gõ admin là tên người dùng và mật khẩu. Nó được thể hiện trong hình

Bây giờ nhấn nút Get và chờ một vài giây và phản hồi sẽ được tải xuống và sẽ được hiển thị cho bạn. Trong trường hợp này, phản hồi là ROLE được tìm nạp trong trường hợp quản trị là tên người dùng và mật khẩu. Nó được thể hiện trong hình bên dưới

Bây giờ một lần nữa nhấn nút POST và kết quả tương tự sẽ xuất hiện. Nó được thể hiện trong hình bên dưới

Không có nhận xét nào:

Đăng nhận xét

Lập trình Android - RenderScript

Trong chương này, chúng ta sẽ tìm hiểu về Android RenderScript. Thông thường các ứng dụng trên Android được thiết kế để tiêu thụ tài nguyên ...