aedev.net
  • Trang chủ
  • AI
  • Mobile
  • Flutter
  • React Native
  • Backend
  • DevOps
  • Hướng dẫn
No Result
View All Result
SAVED POSTS
aedev.net
  • Trang chủ
  • AI
  • Mobile
  • Flutter
  • React Native
  • Backend
  • DevOps
  • Hướng dẫn
No Result
View All Result
aedev.net
No Result
View All Result
Minh họa môi trường phát triển React Native với laptop, Android emulator và iOS simulator

Android TextUtils.isEmpty không loại chuỗi toàn khoảng trắng

Suong Nguyen by Suong Nguyen
11/11/2026
in Lập trình Mobile
0
585
SHARES
3.2k
VIEWS
Summarize with ChatGPTShare to Facebook

Một form yêu cầu nhập tên nhưng vẫn chấp nhận ba dấu cách. Nếu điều kiện kiểm tra dùng TextUtils.isEmpty, hãy nhìn lại hợp đồng của hàm: chuỗi có độ dài lớn hơn 0 vẫn có thể không chứa nội dung mà sản phẩm muốn chấp nhận.

Bài này giúp bạn tách ba trường hợp: chưa có giá trị, chuỗi không có ký tự và chuỗi chỉ gồm whitespace. Từ đó, bạn có thể viết một điều kiện validation dễ đọc và một kế hoạch kiểm thử ngắn cho form Android.

Điều kiện và giới hạn

Đối chiếu Android API reference ngày 11/11/2026: TextUtils.isEmpty có từ API level 1. Tài liệu Kotlin hiện hiển thị nhánh 2.4; isBlank và isNullOrBlank có từ Kotlin 1.0. Bài không yêu cầu nâng toàn bộ dự án lên phiên bản đó chỉ để dùng các hàm này.

Ví dụ được rà theo tài liệu, chưa biên dịch Kotlin, chạy Android SDK, emulator hay thiết bị. Bảng hành vi dưới đây là kỳ vọng theo hợp đồng API, không phải log thực thi. Bạn nên chạy test trên cấu hình Kotlin và Android của dự án.

1. Chọn đúng câu hỏi cho tên nhập

TextUtils.isEmpty kiểm tra null hoặc độ dài bằng 0. Kotlin isBlank kiểm tra chuỗi rỗng hoặc toàn ký tự whitespace theo định nghĩa Char.isWhitespace; phiên bản isNullOrBlank xử lý thêm null.

Với dữ liệu kiểu nullable, ba fixture đầu nên là null, chuỗi rỗng và ba dấu cách. Sau đó thêm một tên có nội dung để xác nhận điều kiện không từ chối mọi đầu vào.

import android.text.TextUtils

fun inspectName(raw: String?): Pair<Boolean, Boolean> {
    return TextUtils.isEmpty(raw) to raw.isNullOrBlank()
}

// Kỳ vọng theo API, cần chạy trong test của dự án:
// null    -> true, true
// ""      -> true, true
// "   "   -> false, true
// "An"    -> false, false

Hai boolean trả lời hai câu hỏi khác nhau. Đừng thay hàm ở toàn bộ codebase chỉ vì một form có lỗi: một trường tùy chọn có thể cho phép khoảng trắng theo hợp đồng riêng, hoặc bước khác đã chuẩn hóa dữ liệu.

2. Kiểm tra blank và chuẩn hóa là hai quyết định

Giả sử tên hiển thị cần có nội dung và không giữ khoảng trắng hai đầu. Bạn có thể viết hàm nhỏ trước khi nối với View:

fun normalizeDisplayName(raw: String?): String? {
    if (raw.isNullOrBlank()) return null
    return raw.trim()
}

Hàm trả null để biểu diễn đầu vào không hợp lệ trong ví dụ; nó không gửi dữ liệu hay tự hiển thị thông báo. Với " An Nguyen ", kỳ vọng là "An Nguyen", còn khoảng trắng giữa hai phần tên vẫn được giữ. Đừng dùng cách xóa mọi dấu cách để giải quyết lỗi chuỗi blank.

Trước khi áp dụng cho mật khẩu, mã định danh hoặc văn bản nhiều dòng, hãy đọc lại hợp đồng sản phẩm. Quy tắc của tên hiển thị trong ví dụ không tự phù hợp cho mọi trường nhập. Một bước trim không có trong đặc tả có thể làm thay đổi dữ liệu người dùng muốn giữ.

3. Nối vào form Android

Trong listener của nút Lưu, lấy chuỗi từ EditText rồi truyền vào hàm chuẩn hóa. Đoạn tích hợp sau giả định nameInput là EditText đang tồn tại trong màn hình, không phải một Activity hoàn chỉnh.

val candidate = normalizeDisplayName(nameInput.text?.toString())
if (candidate == null) {
    nameInput.error = "Hãy nhập tên có nội dung"
} else {
    nameInput.error = null
    // Chuyển candidate cho bước xử lý tiếp theo của ứng dụng.
}

Không dùng TextUtils để suy ra chuỗi đã hợp lệ theo mọi quy tắc nghiệp vụ. Kiểm tra có nội dung chỉ là một bước. Độ dài, ký tự được phép và tính duy nhất cần có điều kiện riêng nếu sản phẩm yêu cầu.

Kế hoạch kiểm thử

Tạo test cho null, rỗng, dấu cách, tab, xuống dòng, tên bình thường và tên có khoảng trắng hai đầu. Với từng case, ghi rõ đầu vào, kết quả chuẩn hóa mong đợi và thông báo UI tương ứng. Một test chỉ có chuỗi rỗng sẽ bỏ sót chính lỗi ban đầu.

Nếu ứng dụng cần phân biệt các loại khoảng trắng Unicode hoặc ký tự không nhìn thấy, bổ sung fixture theo hợp đồng cụ thể. Bài này không khẳng định mọi ký tự “trông như trống” đều được Kotlin coi là whitespace. Đọc định nghĩa ký tự và kiểm tra phiên bản runtime đích trước khi mở rộng chính sách.

Lỗi thường gặp và kết luận

Đừng gọi kiểm tra blank rồi gửi nguyên một chuỗi chưa chuẩn hóa trong khi giao diện hiển thị chuỗi đã trim. Hãy xác định rõ giá trị nào sẽ được gửi và kiểm thử giá trị đó. Validation phía client cũng không thay thế kiểm tra ở backend.

Với tên hiển thị cần nội dung, isNullOrBlank diễn đạt yêu cầu rõ hơn phép kiểm tra độ dài. Giữ chính sách chuẩn hóa riêng, có fixture và thông báo dễ hiểu cho người dùng.

Nguồn tham khảo

  • Android: TextUtils.isEmpty
  • Kotlin: isBlank
  • Kotlin: isNullOrBlank

Tags: AndroidKotlinValidation
SummarizeShare234
Suong Nguyen

Suong Nguyen

Related Stories

Minh họa môi trường phát triển React Native với laptop, Android emulator và iOS simulator

Android runOnUiThread và Handler.post: chạy ngay hay đưa vào hàng đợi?

by Suong Nguyen
10/11/2026
0

Đọc đúng thứ tự callback khi gọi runOnUiThread từ main thread và phân biệt với Handler.post gắn vào main Looper.

Minh họa môi trường phát triển React Native với laptop, Android emulator và iOS simulator

Android CheckBox: đổi isChecked bằng code vẫn có thể gọi listener

by Suong Nguyen
09/11/2026
0

Phân biệt sự kiện đổi trạng thái với thao tác bấm của người dùng khi dùng CheckBox và OnCheckedChangeListener trong Android Views.

Minh họa môi trường phát triển React Native với laptop, Android emulator và iOS simulator

Android TextView.setText(Int): số đếm có thể bị hiểu thành resource ID

by Suong Nguyen
08/11/2026
0

Phân biệt overload setText nhận resource ID với overload nhận nội dung để hiển thị số đếm mà không gọi nhầm tài nguyên chuỗi.

Minh họa môi trường phát triển React Native với laptop, Android emulator và iOS simulator

Android elapsedRealtime và uptimeMillis: thời gian máy ngủ có được tính không?

by Suong Nguyen
07/11/2026
0

Chọn đồng hồ đo khoảng thời gian theo yêu cầu có tính deep sleep, và giữ mốc since-boot riêng với timestamp theo lịch.

0 0 votes
Article Rating
Subscribe
Login
Notify of
guest
guest
0 Comments
Oldest
Newest Most Voted
AE Dev

AE Dev mang đến các bài viết về lập trình, mobile app, backend, frontend, WordPress và công nghệ, phù hợp cho developer muốn học hỏi và cập nhật kiến thức thực tế.

Recent Posts

  • React Native: thông báo nội dung đổi cho TalkBack bằng accessibilityLiveRegion
  • Promise.finally: return giá trị mới có thay kết quả của chuỗi không?
  • Android TextUtils.isEmpty không loại chuỗi toàn khoảng trắng

Categories

  • AI
  • Backend
  • Đánh giá
  • DevOps
  • Flutter
  • Hướng dẫn
  • Lập trình Mobile
  • Phỏng vấn
  • React Native
  • Uncategorized

Weekly Newsletter

  • Buy JNews
  • Support Forum
  • Pre-sale Question
  • Contact Us

© 2026 AE Dev - Blog công nghệ, lập trình và chia sẻ kiến thức IT.

Welcome Back!

Login to your account below

Forgotten Password?

Retrieve your password

Please enter your username or email address to reset your password.

Log In
No Result
View All Result
  • Trang chủ
  • AI
  • Mobile
  • React Native
  • Backend
  • DevOps
  • Hướng dẫn
  • Flutter

© 2026 AE Dev - Blog công nghệ, lập trình và chia sẻ kiến thức IT.

wpDiscuz
0
0
Would love your thoughts, please comment.x
()
x
| Reply