This is default featured slide 1 title
Go to Blogger edit html and find these sentences.Now replace these sentences with your own descriptions.
This is default featured slide 2 title
Go to Blogger edit html and find these sentences.Now replace these sentences with your own descriptions.
This is default featured slide 3 title
Go to Blogger edit html and find these sentences.Now replace these sentences with your own descriptions.
This is default featured slide 4 title
Go to Blogger edit html and find these sentences.Now replace these sentences with your own descriptions.
This is default featured slide 5 title
Go to Blogger edit html and find these sentences.Now replace these sentences with your own descriptions.
TRY, CATCH, FINALLY TRONG JAVA
Bình thường theo các bài trước, các bạn sẽ dùng if, else để loại bỏ, in ra lỗi. (tất nhiên nếu bạn đã biết try catch rồi thì không nói ). Đọc xong bài này, các bạn sẽ có thêm 1 cách khác, và tất nhiên nó còn sử dụng để bắt và xử lý nhiều loại lỗi hơn!
Ví dụ: Các bạn xem đoạn code này trước khi đọc lý thuyết, chạy thử nó, có thể nó cũng khá dễ hiểu!
package javaandroidvn;
public class JavaAndroidVn {
public static void main(String[] args) {
int a = 5;
int b = 0;
//Cách các bài trước thường làm, dùng if, else:
if (b == 0) {
System.out.println("Lỗi chia cho 0");
} else {
System.out.println("a/b = " + a / b);
}
System.out.println("\nCách dùng try - catch - finally \n");
//Sử dụng try, catch để bắt lỗi:
try {
System.out.println("a/b = " + a / b);
} catch (Exception e1) {
System.out.println("Có lỗi gì đó xảy ra ");
System.out.println("Tên lỗi là: " + e1);
} finally {
System.out.println("Có lỗi hay không thì cái dòng cuối cùng này vẫn được in ra!");
}
}
}
- Trong ví dụ trên, trong khối try{} là những dòng lệnh chúng ta cần thực hiện!
Khối catch (Exception e1) {} là nơi chứa các dòng lệnh thực hiện khi phát hiện lỗi!
- Ở đây, ta cần hiểu rõ khái niệm Exception:
Exception (Ngoại lệ) là sự kiện xảy ra khi một chương trình đang chạy mà phát sinh ra lỗi. Nó sẽ làm gián đoạn chương trình!
(Exception e1) trong đó "e1" là tên của được gán nếu đối tượng bị lỗi, các bạn có thể đặt tên này bằng các từ khác.
- Bạn có thể in "e1" ra ngoài, sẽ thấy được lỗi cụ thể!
- Exception là lớp cha, nó nói chung, và in ra các lỗi, ngoài ra còn có lớp con cụ thể và các ngoại lệ khác như sau:
Exception | Lớp nền của run-time
NullPointerException | Một đối tượng không tồn tại
ClassNotFoundException | Không tìm thấy Class
FileNotFoundException | Không tìm thấy file
SecurityException | Exception liên quan đến bảo mật
ArrayIndexOutOfBoundsException | Vượt quá chỉ mục của mảng
IllegalAccessException | Truy cập không hợp lệ
IllegalArgumentException | Đối số hàm
ArithmeticException | Lỗi thực thi một phép toán
NumberFormatException | Định dạng số không đúng
IOException | Lỗi nhập xuất
EOFException | Kết thúc một tập tin
NoSuchMethodException | Sai tên phương thức
InterruptedException | Ngắt luồng đang được thực thi
Ví dụ: In ra lỗi cụ thể vượt quá chỉ mục của mảng.
package javaandroidvn;
public class JavaAndroidVn {
public static void main(String[] args) {
int arrInt[] = {1, 2, 4, 7, 10};
try {
System.out.println("arrInt[6] = " + arrInt[6]);
} catch (ArrayIndexOutOfBoundsException e2) {
System.out.println("Lỗi! Vượt quá chỉ mục của mảng! " + e2);
}
}
}
try {
//Nội dung muốn bẫy lỗi} catch (ExceptionType1 e) {
//Khối lệnh cho lỗi}catch (ExceptionType2 e1) {
//Khối lệnh cho lỗi} catch (Exception ex) {
//Exception cho những cái còn lại}
2, Finally?
Nó nằm ở cuối cùng của khối lệnh try - catch - finally, nó luôn luôn được thực hiện ngay cả khi chương trình có bắt được lỗi
hay không!
Trong khối lệnh đầy đủ như ví dụ ở đầu bài, dòng System.out.println("Có lỗi hay không thì cái dòng cuối cùng này vẫn được in ra!");
Luôn luôn được thực hiện và in ra khi bạn gán bất giá trị nào cho b!
Xem thêm video nói khá đầy đủ về try - catch - finally của Blog StudyAndShare
Thực hành về Toast Notification và Alert Dialog
- Cả Toast và Alert Dialog khi hiển thị lên thì các tiến trình (hay các lệnh) khác vẫn cứ tiếp tục làm việc.
1) Toast:
- Toast có thể được tạo và hiển thị trong Activity hoặc trong Servive.
- Không cho phép người sử dụng tương tác
- Khi hiển thị sau khoảng thời gian nào đó sẽ tự đóng lại
- Có 2 giá trị mặc định (ta nên sử dụng 2 giá trị này, không nên gõ con số cụ thể vào): hằng số Toast.LENGTH_SHORT hiển thị trong 2 giây, Toast.LENGTH_LONG hiển thị trong 3.5 giây.
Cách tạo Toast:
Theo Tôi thì tùy bạn, bạn có thể sử dụng trong trường hợp hiển thông báo trong các mục thiết lập thông số cấu hình, hay đơn giản chỉ là hiển thị lên để xem thông tin tạm thời nào đó (giống như để kiểm tra một vấn đề sảy ra chẳng hạn).
- Hình dưới đây cho bạn biết 1 Toast đang hiển thị:
2) Alert Dialog:
- Hiển thị và cho phép người dùng tương tác, ví dụ bạn nhìn hình Tôi chụp bên dưới, khi nhấn nút “Cancel”, chương trình sẽ hiển thị Alert Dialog hỏi xem có chắc chắn muốn xóa hay không? Bấm No thì không, bấm Yes thì tắt chương trình.
- Cách tạo Alert Dialog:
@Override
public void onClick(DialogInterface dialog, int which)
{
dialog.cancel();
}
});
b.create().show();
- setTitle : thiết lập tiêu đề cho Dialog
- setMessage: Thiết lập nội dung cho Dialog
-setIcon : để thiết lập Icon
-setPositiveButton, setNegativeButton thiết lập hiển thị Nút chọn cho Dialog (ở đây bạn không quan tâm Nút chấp nhận hay Nút hủy nó thuộc PositiveButton hay NegativeButton vì đó là tùy thuộc bạn chọn. Chú ý là ở đối số thứ 2 của các hàm này sẽ là DialogInterface. OnClickListener chứ không phải View. OnClickListener
- create() để tạo Dialog
- show() để hiển thị Dialog.
Formatting String
Hướng dẫn sử dụng String.Format
example
|
output
|
String.Format(“–{0,10}–”, “test”); | – test– |
String.Format(“–{0,-10}–”, “test”); | –test – |
Formatting number
specifier
|
type
|
format
|
output
(double 1.2345) |
output
(int -12345) |
c | currency | {0:c} | £1.23 | -£12,345.00 |
d | decimal (whole number) | {0:d} | System.FormatException | -12345 |
e | exponent / scientific | {0:e} | 1.234500e+000 | -1.234500e+004 |
f | fixed point | {0:f} | 1.23 | -12345.00 |
g | general | {0:g} | 1.2345 | -12345 |
n | number | {0:n} | 1.23 | -12,345.00 |
r | round trippable | {0:r} | 1.23 | System.FormatException |
x | hexadecimal | {0:x4} | System.FormatException | ffffcfc7 |
Custom number formatting
specifier
|
type
|
format
|
output
(double 1234.56) |
0 | zero placeholder | {0:00.000} | 1234.560 |
# | digit placeholder | {0:#.##} | 1234.56 |
. | decimal point placeholder | {0:0.0} | 1234.6 |
, | thousand separator | {0:0,0} | 1,235 |
% | percentage | {0:0%} | 123456% |
specifier
|
type
|
output
(June 8, 1970 12:30:59) |
d | Short Date | 08/06/1970 |
D | Long Date | 08 June 1970 |
t | Short Time | 12:30 |
T | Long Time | 12:30:59 |
f | Full date and time | 08 June 1970 12:30 |
F | Full date and time (long) | 08 June 1970 12:30:59 |
g | Default date and time | 08/06/1970 12:30 |
G | Default date and time (long) | 08/06/1970 12:30:59 |
M | Day / Month | 8 June |
r | RFC1123 date string | Mon, 08 Jun 1970 12:30:59 GMT |
s | Sortable date/time | 1970-06-08T12:30:59 |
u | Universal time, local timezone | 1970-06-08 12:30:59Z |
Y | Month / Year | June 1970 |
Custom date formatting
specifier
|
type
|
output
(June 8, 1970 12:30:59) |
dd | Day | 08 |
ddd | Short Day Name | Mon |
dddd | Full Day Name | Monday |
hh | 2 digit hour | 12 |
HH | 2 digit hour (24 hour) | 12 |
mm | 2 digit minute | 30 |
MM | Month | 06 |
MMM | Short Month name | Jun |
MMMM | Month name | June |
ss | seconds | 59 |
tt | AM/PM | PM |
yy | 2 digit year | 70 |
yyyy | 4 digit year | 1970 |
: | seperator, e.g. {0:hh:mm:ss} | 12:30:59 |
/ | seperator, e.g. {0:dd/MM/yyyy} | 08/06/1970 |