Đầu tiên các bạn có thể đọc qua bài giới thiệu về Volley tại đây.
Hôm nay mình sẽ hướng dẫn cho các bạn cách chi tiết để viết ứng dụng login sử dụng Volley kết hợp với PHP.
1.Các bước thực hiện
- Một hosting free, tên miền các thứ, có thể sử dụng
Hostinger để test. - Tạo database
- Viết trang PHP để xác thực
- Tạo giao diện login
- Xử lý đăng nhập bằng Volley
- Tạo Activity nhận kết quả trả về
1.1 Tạo database
Tại Hostinger tạo database như sau:
Tạo database và truy cập vào phpmyadmin
Tiến hành tạo một table account như sau:
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 để xác thực data
- 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'); ?>
- File login.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']; $sql = "SELECT user_name, email FROM account WHERE user_name = '$username' AND password='$password'"; if(mysqli_num_rows(@mysqli_query($con,$sql)) > 0){ $result= mysqli_query($con,$sql); $row = mysqli_fetch_array($result); $user_name = $row["user_name"]; $email = $row["email"]; $response["success"] = 1; $response["message"] = "Đăng nhập thành công"; $response["user_name"] = $user_name; $response["email"] = $email; }else{ $response["success"] = 0; $response["message"] = "Đăng nhập thất bại."; } /**Return json*/ echo json_encode($response); } ?>
Tiến hành upload 2 file này lên hosting của bạn.
1.3 Thiết kế giao diện login đơn giản như sau:
<?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_login" 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/white" android:hint="@string/login_lable1" android:inputType="textEmailAddress" android:padding="10dp" android:textColor="@color/input_login" android:textColorHint="@color/input_login_hint" /> <EditText android:id="@+id/editPassword" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginBottom="10dp" android:background="@color/white" android:hint="@string/login_lable2" android:inputType="textPassword" android:padding="10dp" android:textColor="@color/input_login" android:textColorHint="@color/input_login_hint" /> <!-- Login Button --> <Button android:id="@+id/btnLogin" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginTop="20dip" android:background="@color/btn_login_bg" android:text="@string/login_btn" android:textColor="@color/btn_login" /> <!-- Link to Login Screen --> <Button android:id="@+id/btnRegister" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginTop="40dip" android:background="@null" android:text="@string/register_btn" android:textAllCaps="false" android:textColor="@color/white" android:textSize="15dp" /> </LinearLayout> </LinearLayout>
- color.xml
<color name="bg_login">#26ae90</color> <color name="bg_register">#2e3237</color> <color name="bg_main">#428bca</color> <color name="white">#ffffff</color> <color name="input_login">#222222</color> <color name="input_login_hint">#999999</color> <color name="input_register">#888888</color> <color name="input_register_bg">#3b4148</color> <color name="input_register_hint">#5e6266</color> <color name="btn_login">#26ae90</color> <color name="btn_login_bg">#eceef1</color> <color name="lbl_name">#333333</color> <color name="btn_logut_bg">#ff6861</color>
- strings.xml
<string name="login_title">ĐĂNG NHẬP</string> <string name="login_lable1">Tài Khoản</string> <string name="login_lable2">Mật Khẩu</string> <string name="login_btn">Đăng nhập</string> <string name="register_title">TẠO TÀI KHOẢN</string> <string name="register_email">Email</string> <string name="register_btn">Đăng Ký</string>
- 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"/>
- Tạo một model: Account.java
package com.lynkmieu.loginvolley.model; import java.io.Serializable; /** * Created by LynkMieu on 20/08/2016. */ public class Account implements Serializable { private String userName; private String email; public Account() { } public Account(String userName, String email) { this.userName = userName; this.email = email; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } }
- Viết code xử lý đăng nhập: LoginActivity.java
public class LoginActivity extends AppCompatActivity { public static final String TAG = LoginActivity.class.getSimpleName(); private EditText edtUserName; private EditText edtPassWord; private Button btnLogin; private Button btnRegister; private ProgressDialog pDialog; /** * URL : URL_LOGIN * param : KEY_USERNAME KEY_PASSWORD */ public static final String URL_LOGIN = "http://dev.androidcoban.com/blog/login.php"; public static final String KEY_USERNAME = "username"; public static final String KEY_PASSWORD = "password"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_login); addControl(); addEvent(); } private void addEvent() { btnLogin.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //Get value input String username = edtUserName.getText().toString().trim(); String password = edtPassWord.getText().toString().trim(); // Call method loginAccount(username, password); } }); btnRegister.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(LoginActivity.this, RegisterActivity.class); startActivity(intent); } }); } private void addControl() { edtUserName = (EditText) findViewById(R.id.editUsername); edtPassWord = (EditText) findViewById(R.id.editPassword); btnLogin = (Button) findViewById(R.id.btnLogin); btnRegister = (Button) findViewById(R.id.btnRegister); pDialog = new ProgressDialog(this); pDialog.setMessage("Đang đăng nhập..."); pDialog.setCanceledOnTouchOutside(false); } /** * Method login * * @param username * @param password result json */ public void loginAccount(final String username, final String password) { if (checkEditText(edtUserName) && checkEditText(edtPassWord)) { pDialog.show(); StringRequest requestLogin = new StringRequest(Request.Method.POST, URL_LOGIN, 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(LoginActivity.this, message, Toast.LENGTH_SHORT).show(); Intent intent = new Intent(LoginActivity.this, ResultLogin.class); intent.putExtra("login", account); startActivity(intent); } else { message = jsonObject.getString("message"); Toast.makeText(LoginActivity.this, message, Toast.LENGTH_LONG).show(); } } catch (JSONException e) { e.printStackTrace(); } pDialog.dismiss(); } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { VolleyLog.d(TAG, "Error: " + error.getMessage()); pDialog.dismiss(); } }) { /** * set paramater * */ @Override protected Map<String, String> getParams() { Map<String, String> params = new HashMap<>(); params.put(KEY_USERNAME, username); params.put(KEY_PASSWORD, password); return params; } }; RequestQueue queue = Volley.newRequestQueue(this); queue.add(requestLogin); } } /** * 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; } }
Tạo thêm 1 activity để nhận kết quả trả về: ResultLogin
- activity_result_login.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_result_login" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <TextView android:text="Wellcome!" android:layout_width="match_parent" android:layout_height="wrap_content" android:textSize="16sp" android:id="@+id/textView2" /> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:textSize="16sp" android:id="@+id/txtUserName" /> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:textSize="16sp" android:id="@+id/txtEmail" /> </LinearLayout>
- ResultLogin.java
public class ResultLogin extends AppCompatActivity { private TextView txtUserName; private TextView txtEmail; private Account account; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_result_login); Intent intent = getIntent(); account = new Account(); account = (Account) intent.getSerializableExtra("login"); addControl(); } private void addControl() { txtEmail = (TextView) findViewById(R.id.txtEmail); txtUserName = (TextView) findViewById(R.id.txtUserName); /**Set value*/ txtUserName.setText(account.getUserName()); txtEmail.setText(account.getEmail()); } }
Cuối cùng tiến hành chạy project! Chúc các bạn thành công!
Github: https://github.com/nguyenlinhnttu/LoginVolley
Bình luận đã bị khoá.