Thứ Tư, 26 tháng 12, 2018

Tạo ứng dụng CRUD đơn giản với spring boot và thymeleaf

Ở bài này, chúng ta cùng demo 1 sample nho nhỏ về spring boot + thymeleaf Let's go...

1. Công cụ sử dụng

- spring boot 2.1.1.RELEASE
- maven 3.x...
- java 1.8
- IDE: Spring tool suite



2. Thư viện và cấu hình pom.xml




3. Model layer


4. Repository layer (tầng này extends thằng CrudRepository có sẵn để dùng các chức năng CRUD cơ bản)


5. Controller layer


6. View layer (dùng thymeleaf)

- add-user - update-user - index Ok. Done.  Have a nice day, and happy coding.

Thứ Năm, 13 tháng 9, 2018

Android SnackBar

- SnackBar cung cấp 1 cái phản hồi ngắn gọi thông qua 1 message dưới màn hình

- Thêm thư viện vào build.gradle(Module: app)

compile 'com.android.support:design:27.1.1'
or
implementation 'com.android.support:design:27.1.1'

compile - android studio phiên bản cũ
implementation - android studio phiên bản mới

27.1.1 là version

- viết code
+ ở layout:
tôi kéo 1 button và gán sự kiện click cho nó.
chúng ta sẽ code Snackbar trong sự kiện click này.
Snackbar.make(v, "Nguyen The Lam", Snackbar.LENGTH_SHORT)
        .setAction("Action", new View.OnClickListener() {
            @Override            public void onClick(View v) {
                Toast.makeText(MainActivity.this, "Toast nay", Toast.LENGTH_SHORT).show();
            }
        })
        .setActionTextColor(Color.RED)
        .show();

ý nghĩa:

Đối tượng Snackbar gọi hàm make
tham số: v - view
"Nguyen The Lam" - chuỗi show ra màn hình
"Snackbar.LENGTH_SHORT" - thời gian show lên màn hình

ở đây, tôi set thêm action cho snackbar. khi snackbar hiện lên
sẽ có thêm 1 action click và hiển thị Toast với nội dung như trên.
Tôi set thêm màu cho action này

và cuối cùng là call hàm show() để hiển thị snackbar này.




Thứ Hai, 10 tháng 9, 2018

Android measure unit: px, in, dip, dp, sp, pt

1. px - pixels
corresponds to actual pixels on the screen
tương ứng với điểm ảnh thực trên màn hình

2. in - inches
based on the physical size of the screen
dựa trên size vật lý của màn hình
1 inch = 2.54 centimeters (cm)

3. mm - millimeters
based on the physical of the screen
dựa trên size vật lý của màn hình

4. pt - points
1/72 of an inch based on the physical size of the screen
pt = 1/72 in

5. dp or dip - density
independent pixels - an abstract unit that is based on the physical density of the screen.
pixels độc lập - 1 đơn vị trừu tượng mà dựa trên tỷ trọng vật lý của màn hình.

6. sp - scale
independent pixels - this is like the dp unit, but it is also scaled by the user's font size preference.
pixels độc lập - giống với dp, nhưng nó có thể co giãn bởi thiết lập cỡ font của user.

reference (tham khảo): https://developer.android.com/guide/topics/resources/more-resources#Dimension


Thứ Tư, 17 tháng 1, 2018

Java 8: Date, Local Date, Local Date Time, Instant

1. Hạn chế của java date time api các version trước 8
Trước khi chúng ta bắt đầu với date time api version 8, cùng xem vài hạn chế với date, time hiện tại của java.
- Việc thiết kế các class java date time chưa hợp lý, chúng ta có:
Date class trong: java.util và java.sql, trong khi đó thì formatting và parsing class thì lại định nghĩa trong gói java.text
- java.util.Date bao gồm cả date và time, trong khi đó java.sql.Date thì chỉ có Date.
- Không có 1 class định nghĩa rõ ràng cho Time, formatting và parsing. Chúng ta có abstract class java.text.DateFormat dùng để formatting và parsing. Thường thì sử dụng SimpleDateFormat cho việc formatting và parsing.
- Tất cả Date class thì mutable, tức là có thể thay đổi được, vì vậy nên chúng thì not thread safe. Đây là một vấn đề lớn của các class Date và Calendar trong java.
- Class Date trong java thì không hỗ trợ internationalization, tức là không hỗ trợ việc quốc tế hóa. Không có một sự hỗ trợ timezone nào. Vì vậy mà java.util.Calendar và java.util.TimeZone được giới thiệu nhưng chúng cũng có những hạn chế nêu trên.

2. java 8 Date
Một số nguyên tắc thiết kế của java Date Time API 8:
- immutability: Tất cả các class trong API Date Time mới thì immutable (bất biến) điều này đồng nghĩa với việc nó rất tốt cho môi trường đa luồng (multi thread).
- Separation of Concerns: Có nghĩa là nó định nghĩa các class riêng rẽ: Date, Time, DateTime, TimeStamp, TimeZone, ...
- Clarity: các method được định nghĩa rõ ràng và thực thi cùng nhiệm vụ trong tất cả các class, ví dụ: để lấy được current instant chúng ta có now() method.
Tất cả class sử dụng: Factory Pattern và Strategy Pattern sẽ tốt hơn cho việc xử lý. Một khi sử dụng phương thức trong một class thì việc sử dụng trong class khác sẽ không thành vấn đề.
- Utility operations:  Tất cả Date Time API mới đều thiết kế những phương thức thực hiện những nhiệm vụ chung, như là: plus, minus, format, parsing, ...

3. Java 8 Date Time API package
- java.time
là gói chính của java date time api, những class chính như: LocalDate, LocalTime, LocalDateTime, Instant, Period, Duration đều thuộc gói này. Tất cả các class này đều: immutable và thread safe.
- java.time.chrono
- java.time.format
- java.time.temporal
- java.time.zone

4. Example
- LocalDate

                java.time.LocalDate today = java.time.LocalDate.now();
System.out.println("Today is: " + today);

Lấy ra ngày hiện tại với định dạng: yyyy-mm-dd

- LocalTime

              LocalTime time = LocalTime.now();
      System.out.println(time);

Lấy ra giờ hiện tại của hệ thống và time-zone mặc định.

- LocalDateTime
           
             LocalDateTime today = LocalDateTime.now();
     System.out.println(today);

Lấy ra ngày giờ hiện tại của hệ thống.

- Instant

          Instant timeStamp = Instant.now();
  System.out.println(timeStamp);