Đặt vấn đề

Xây dựng ứng dụng android làm việc với cơ sở dữ liệu được lưu trữ trên các server sử dụng các hệ quản trị cơ sở dữ liệu như MySQL, SQLServer, Oracle, …  cho phép người sử dụng thực hiện các thao tác cơ bản CRUD(Create, Read, Update, Delete)

Trong bài viết này, chúng tôi sẽ hướng dẫn các bạn thực hiện thêm dữ liệu (Create) vào MySQL thông qua PHP. Ứng dụng android sẽ thông qua PHP để thực hiện các thao tác trên dữ liệu. Điều đó có nghĩa là PHP sẽ thực hiện kết nối với MySQL và xử lý dữ liệu theo yêu cầu từ ứng dụng android. Dữ liệu được đóng gói dưới dạng JSON.

kết nối android với mysql

Chuẩn bị 

Các bước thực hiện

Lưu ý nếu các bạn đã xem và làm theo bài viết hướng dẫn kết nối android với mysql (phần 1) thì sẽ bỏ qua các muc (1), (2), (3)(4). Ngoại trừ mục (2) các bạn chỉ thực hiện tạo tập tin createPF.php

Tạo cơ sở dữ liệu trên MySQL (1)

Sử dụng phpmyadmin từ http://localhost/phpmyadmin/ để tạo một cơ sở dữ liệu và môt bảng sử dụng câu lệnh

  • Câu lệnh tạo cơ sở dữ liệu tên platfformdb
CREATE DATABASE platfformdb
  • Câu lệnh tạo bảng platfform
CREATE TABLE platfform (
 id int(11) NOT NULL AUTO_INCREMENT,
 name varchar(30) NOT NULL,
 PRIMARY KEY (id)
);
  • Câu lệnh thêm dữ liệu cho bảng platfform
INSERT INTO platfform (name) VALUES ('Android');
INSERT INTO platfform (name) VALUES ('iOS');
INSERT INTO platfform (name) VALUES ('Windows Phone');

Tạo PHP Project (2)

  • Mở thư mục htdocs trong thư mục xampp và tạo thêm một thư mục tên platfform
  • Tạo tập tin config.php và lưu trong thư mục platfform
<?php
/**
 * Database configuration
 */
define('DB_USERNAME', 'root');
define('DB_PASSWORD', '');
define('DB_HOST', 'localhost');
define('DB_NAME', 'platfformdb');
?>
  • Tạo tập tin dbConnect.php và lưu trong thư mục platfform
<?php

/**
 * Connecting / disconnecting Database
 *
 */

class dbConnect {
 
 private $conn;

 // constructor
 function __construct() {
 
 // connecting to database
 $this->connect();
 }

 // destructor
 function __destruct() {
 // closing db connection
 $this->close();
 }

 /**
 * Establishing database connection
 * @return database handler
 */
 function connect() { 
 include_once dirname(__FILE__) . './config.php';
 
 // Connecting to mysql database
 $this->conn = mysql_connect(DB_HOST, DB_USERNAME, DB_PASSWORD) or die(mysql_error());

 // Selecting database
 mysql_select_db(DB_NAME) or die(mysql_error());
 
 // returing connection resource
 return $this->conn;
 }

 /**
 * Closing database connection
 */
 function close() {
 // closing db connection
 mysql_close($this->conn);
 }

}
?>
  • Tạo tập tin createPF.php và lưu trong thư mục platfform
<?php

/*
 * Following code will create a new product row
 * All product details are read from HTTP Post Request
 */

// array for JSON response
$response = array();

// check for required fields
if (isset($_POST['name'])) {
 
 $name = $_POST['name'];
 
 // include db connect class
 require_once __DIR__ . '/dbConnect.php';

 // connecting to db
 $db = new dbConnect();

 // mysql inserting a new row
 $result = mysql_query("INSERT INTO platfform(name) VALUES('$name')");

 // check if row inserted or not
 if ($result) {
 // successfully inserted into database
 $response["success"] = 1;
 $response["message"] = "Platfform successfully created.";

 // echoing JSON response
 echo json_encode($response);
 } else {
 // failed to insert row
 $response["success"] = 0;
 $response["message"] = "Oops! An error occurred.";
 
 // echoing JSON response
 echo json_encode($response);
 }
} else {
 // required field is missing
 $response["success"] = 0;
 $response["message"] = "Required field(s) is missing";

 // echoing JSON response
 echo json_encode($response);
}
?>

Tạo mới Android Project hoặc sử dụng Project hiện có và thực hiện các yêu cầu sau

Tạo class tên PlatfForm.java (3)

public class PlatfForm {
    public int id;
    public String name;

    public PlatfForm(int id, String name) {
        this.id = id;
        this.name = name;
    }
}

Tạo class ServiceHandler.java (4)

  • Bổ sung useLibrary ‘org.apache.http.legacy’ trong tập tin build.gradle (Module: app)

kết nối android với mysql

  • Tạo tin ServiceHandler.java
public class ServiceHandler {
    static InputStream is = null;
    static String response = null;
    public final static int GET = 1;
    public final static int POST = 2;

    /**
     * Making service call
     *
     * @url - url to make request
     * @method - http request method
     */
    public String makeServiceCall(String url, int method) {
        return this.makeServiceCall(url, method, null);
    }

    /**
     * Making service call
     *
     * @url - url to make request
     * @method - http request method
     * @params - http request params
     */
    public String makeServiceCall(String url, int method, List<NameValuePair> params) {
        try {
            // http client
            DefaultHttpClient httpClient = new DefaultHttpClient();
            HttpEntity httpEntity = null;
            HttpResponse httpResponse = null;

            // Checking http request method type
            if (method == POST) {
                HttpPost httpPost = new HttpPost(url);
                // adding post params
                if (params != null) {
                    httpPost.setEntity(new UrlEncodedFormEntity(params));
                }

                httpResponse = httpClient.execute(httpPost);

            } else if (method == GET) {
                // appending params to url
                if (params != null) {
                    String paramString = URLEncodedUtils.format(params, "utf-8");
                    url += "?" + paramString;
                }
                HttpGet httpGet = new HttpGet(url);

                httpResponse = httpClient.execute(httpGet);

            }
            httpEntity = httpResponse.getEntity();
            is = httpEntity.getContent();

        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        } catch (ClientProtocolException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

        try {
            BufferedReader reader = new BufferedReader(new InputStreamReader(is, "UTF-8"), 8);
            StringBuilder sb = new StringBuilder();
            String line = null;
            while ((line = reader.readLine()) != null) {
                sb.append(line + "\n");
            }
            is.close();
            response = sb.toString();
        } catch (Exception e) {
            Log.e("Buffer Error", "Error: " + e.toString());
        }

        return response;

    }
}

Tạo Activity

Thiết kế giao diện

kết nối android với mysql

Viết xử lý tại Activity

  • Khai báo biến
ProgressDialog pd;
ServiceHandler sh;

EditText etName;
String name;

private static final String URL_NEW_PF = "http://10.0.2.2:port/platfform/createPF.php";
  • Khai báo class NewPlatfForm bên trong Activity dùng để thêm dữ liệu vào MySQL (bảng platfform)
class NewPlatfForm extends AsyncTask {
    String name;

    public NewPlatfForm(String name) {
        this.name = name;
    }

    @Override
    protected void onPreExecute() {
        super.onPreExecute();

        pd = new ProgressDialog(NewPlatfFormActivity.this);
        pd.setMessage("Creating platfform...");
        pd.setIndeterminate(false);
        pd.setCancelable(true);
        pd.show();
    }

    @Override
    protected Object doInBackground(Object[] params) {

        // Building Parameters
        List<NameValuePair> args = new ArrayList<NameValuePair>();
        args.add(new BasicNameValuePair("name", name));

        // getting JSON Object
        // Note that create product url accepts POST method
        String json = sh.makeServiceCall(URL_NEW_PF, ServiceHandler.POST, args);
        if (json != null) {
            try {
                JSONObject jsonObject = new JSONObject(json);
                int success = jsonObject.getInt("success");
                if (success == 1) {
                    //pd.setMessage("successfully created pf");
                } else {
                    //Toast.makeText(NewPlatfFormActivity.this, "failed to create pf", Toast.LENGTH_SHORT).show();
                }
            } catch (JSONException e) {
                Log.d("Error...", e.toString());
            }
        }
        return null;
    }

    @Override
    protected void onPostExecute(Object o) {
        super.onPostExecute(o);
        pd.dismiss();
    }
}
  • Viết xử lý cho nút CREATE và đăng ký tại sự kiện onClick bên layout (etName là id của EditText, name là biến kiểu String)
//Get data from screen
name = etName.getText().toString();
//Call webservice
new NewPlatfForm(name).execute();

Giao diện ứng dụng khi chạy

kết nối android với mysql

Khi người dùng nhập dữ liệu và chạm vào nút CREATE

kết nối android với mysql

Kiểm tra dữ liệu sử dụng phpmyadmin từ http://localhost/phpmyadmin/

kết nối android với mysql

Chia sẻ