Ở 2 bài viết trước mình đã giới thiệu cho các bạn về thư viện volley và xây dựng chức năng đăng nhập sử dụng php/mysql. Các bạn nào chưa xem có thể quay lại xem trước để hiểu hơn.
Ở bài viết này mình sẽ tiếp tục hướng dẫn các bạn cách đăng ký tài khoản.
1.Các bước thực hiện
- Tạo bảng trong database (Các bạn xem ở phần 1)
- Viết trang PHP để đăn ký
- Tạo giao diện đăng ký
- Xử lý đăng ký bằng Volley
- Tạo Activity nhận kết quả trả về
1.1 Tạo bảng account.
CREATE TABLE `account`( `user_id` INT PRIMARY KEY AUTO_INCREMENT, `user_name` VARCHAR(50) NOT NULL, `password` VARCHAR(50) NOT NULL, `email` VARCHAR(100) NOT NULL, UNIQUE (user_name) ); INSERT INTO `account`(`user_name`, `password`, `email`) VALUES ('admin','123456','admin@gmail.com'
1.2 Tạo file PHP để tiến hành đăng ký
- File config kết nối:
<?php $con = mysqli_connect("HOST","USER","PASS","DB_NAME"); //Kết nối database. mysqli_set_charset($con,'utf8'); ?>
- Tạo file register.php
<?php require_once('dbConnect.php'); mysqli_set_charset($con,'utf8'); /** Array for JSON response*/ $response = array(); if($_SERVER['REQUEST_METHOD'] == 'POST'){ $username = $_POST['username']; $password = $_POST['password']; $email = $_POST['email']; $sqlCheck = "SELECT user_name FROM account WHERE user_name = '$username'"; $result = @mysqli_query($con,$sqlCheck); if (mysqli_num_rows($result) != 0) { $response["success"] = 0; $response["message"] = "Tên đăng nhập đã có người sử dụng!"; } else { $sqlInsert = "INSERT INTO account (user_name,password,email) VALUES ('$username','$password','$email')"; $resultInsert = @mysqli_query($con,$sqlInsert); if ($resultInsert) { $sqlGetInfo = "SELECT user_name, email FROM account WHERE user_name = '$username' AND password = '$password'"; $result = mysqli_query($con,$sqlGetInfo); $row = mysqli_fetch_array($result); $response["success"] = 1; $response["message"] = "Đăng ký thành công!"; $response["user_name"] = $user_name; $response["email"] = $email; } else { $response["success"] = 0; $response["message"] = "Đăng ký thất bại!"; } } /**Return json*/ echo json_encode($response); } ?>
Tiến hành upload 2 file này lên hosting.
(Lưu ý các bước tiếp theo mình sử dụng lại project trước đó, các bạn lưu ý để tránh gặp lỗi)
1.3 Tạo RegisterActivity.java:
Giao diện XML:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@color/bg_register" android:gravity="center" android:orientation="vertical" android:padding="10dp" > <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_gravity="center" android:orientation="vertical" android:paddingLeft="20dp" android:paddingRight="20dp" > <EditText android:id="@+id/editUsername" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginBottom="10dp" android:background="@color/input_register_bg" android:hint="@string/login_lable1" android:padding="10dp" android:inputType="textCapWords" android:textColor="@color/input_register" android:textColorHint="@color/input_register_hint" /> <EditText android:id="@+id/editPassword" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginBottom="10dp" android:background="@color/input_register_bg" android:hint="@string/login_lable2" android:inputType="textPassword" android:padding="10dp" android:textColor="@color/input_register" android:textColorHint="@color/input_register_hint" /> <EditText android:id="@+id/editEmail" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginBottom="10dp" android:background="@color/input_register_bg" android:hint="@string/register_email" android:inputType="textEmailAddress" android:padding="10dp" android:textColor="@color/input_register" android:textColorHint="@color/input_register_hint" /> <!-- Login Button --> <Button android:id="@+id/btnRegister" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginTop="20dip" android:background="#ea4c88" android:text="@string/register_btn" android:textColor="@color/white" /> <!-- Link to Login Screen --> <Button android:id="@+id/btnLogin" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginTop="40dip" android:background="@null" android:text="@string/login_btn" android:textAllCaps="false" android:textColor="@color/white" android:textSize="15dp" /> </LinearLayout> </LinearLayout>
- Mở build.gradle khai báo thư viện volley:
compile 'com.android.volley:volley:1.0.0'
- Mở AndroidManifest.xml thêm permistion Internet:
<uses-permission android:name="android.permission.INTERNET"/>
- Code tại RegisterActivity.java tại đây mình có phân thành các hàm con, và comment đầy đủ cho các bạn.
public class RegisterActivity extends AppCompatActivity { public static final String TAG = RegisterActivity.class.getSimpleName(); private EditText edtUserName; private EditText edtPassWord; private EditText edtEmail; private Button btnRegister; private Button btnLogin; private ProgressDialog pDialog; public static final String REGISTER_URL = "http://dev.androidcoban.com/blog/register.php"; public static final String KEY_USERNAME = "username"; public static final String KEY_PASSWORD = "password"; public static final String KEY_EMAIL = "email"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_register); addControls(); addEvents(); } private void addEvents() { btnRegister.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //Get data input String username = edtUserName.getText().toString().trim(); String password = edtPassWord.getText().toString().trim(); String email = edtEmail.getText().toString().trim(); //Call method register registerUser(username, password, email); } }); btnLogin.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(RegisterActivity.this, LoginActivity.class); startActivity(intent); } }); } private void addControls() { edtUserName = (EditText) findViewById(R.id.editUsername); edtPassWord = (EditText) findViewById(R.id.editPassword); btnRegister = (Button) findViewById(R.id.btnRegister); btnLogin = (Button) findViewById(R.id.btnLogin); edtEmail = (EditText) findViewById(R.id.editEmail); pDialog = new ProgressDialog(this); pDialog.setMessage("Đang đăng ký..."); pDialog.setCanceledOnTouchOutside(false); } /** * Method register * * @param username * @param password * @param email result json */ private void registerUser(final String username, final String password, final String email) { if (checkEditText(edtUserName) && checkEditText(edtPassWord) && checkEditText(edtEmail) && isValidEmail(email)) { pDialog.show(); StringRequest registerRequest = new StringRequest(Request.Method.POST, REGISTER_URL, new Response.Listener<String>() { @Override public void onResponse(String response) { Log.d(TAG, response); String message = ""; try { JSONObject jsonObject = new JSONObject(response); if (jsonObject.getInt("success") == 1) { Account account = new Account(); account.setUserName(jsonObject.getString("user_name")); account.setEmail(jsonObject.getString("email")); message = jsonObject.getString("message"); Toast.makeText(RegisterActivity.this, message, Toast.LENGTH_LONG).show(); //Start LoginActivity Intent intent = new Intent(RegisterActivity.this, LoginActivity.class); startActivity(intent); } else { message = jsonObject.getString("message"); Toast.makeText(RegisterActivity.this, message, Toast.LENGTH_LONG).show(); } } catch (JSONException error) { VolleyLog.d(TAG, "Error: " + error.getMessage()); } pDialog.dismiss(); } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { VolleyLog.d(TAG, "Error: " + error.getMessage()); pDialog.dismiss(); } }) { @Override protected Map<String, String> getParams() { Map<String, String> params = new HashMap<>(); params.put(KEY_USERNAME, username); params.put(KEY_PASSWORD, password); params.put(KEY_EMAIL, email); return params; } }; RequestQueue requestQueue = Volley.newRequestQueue(this); requestQueue.add(registerRequest); } } /** * Check Input */ private boolean checkEditText(EditText editText) { if (editText.getText().toString().trim().length() > 0) return true; else { editText.setError("Vui lòng nhập dữ liệu!"); } return false; } /** * Check Email */ private boolean isValidEmail(String target) { if (target.matches("[a-zA-Z0-9._-]+@[a-z]+.[a-z]+")) return true; else { edtEmail.setError("Email sai định dạng!"); } return false; } }
Tiến hành chạy project ! Chúc các bạn thành công!
Github: https://github.com/nguyenlinhnttu/LoginVolley