Bài 21: Truyền dữ liệu và lắng nghe kết quả trả về giữa các Activity

Bài 20 chúng ta đã biết qua cách để truyền data từ activity này sáng activity khác rồi đúng không nào? trong lập trình android thì đa số các bạn sẽ truyền theo kiểu đó tuy nhiên có một số trường hợp khi truyền dữ liệu qua màn hình khác, thì màn hình này sẽ xử lí và tính toán để trả về cho màn hình trước đó.

Ví dụ đơn giản cho bạn thấy như sau:

Khi bạn mở một ứng dụng yêu cầu đăng nhập tài khoản, ở màn hình Đăng nhập thường sẽ nó thêm nút Đăng ký, khi bạn điền tài khoảnmật khẩu vào nếu  trường hợp bạn có account thì click vào nút Đăng nhập còn nếu chưa thì click vào nút Đăng ký.Khi click vào nút Đăng ký bạn sẽ được chuyển đến màn hình Đăng ký, nếu bạn đăng ký thành công thì bạn sẽ được chuyển về lại màn hình Đăng nhập và ở đây tự động ứng dụng sẽ đăng nhập cho bạn luôn không cần bạn nhập lại tài khoản, mật khẩu nữa.Còn nếu bạn đăng ký thất bạn thì khi back về nó không làm gì cả.

Như vậy bạn thấy là bạn đã truyền email và mật khẩu từ màn hình Đăng nhập -> Đăng ký, và ở màn hình Đăng ký sẽ thao tác một số thứ để trả về cho màn hình Đăng nhập kết quả gì đó.

Đó gọi là truyền dữ liệu và lắng nghe kết quả trả về, trong android thì đây cũng là một cái mà các bạn phải biết để sử dụng sau này tuy dự án ít khi dùng lắm nhưng đây cũng là kiến thức căn bản của android.

Bây giờ chúng ta sẽ đi tìm hiểu thông qua một ứng dụng rất nhỏ như sau:

Mình sẽ có 2 màn hình tương ứng là 2 ActivityInputActivituOutput, ở ActivityInput mình sẽ có 2 EditText để các bạn nhập 2 số vào, sau khi nhập 2 số vào thì mình sẽ chuyển 2 số đó sang màn hình ActivityOutput, ở đây nó sẽ tính tổng của 2 số này và sau đó truyền về ActivityInput rồi hiển thị kết quả đó lên một TextView.

Dưới đây là tổng quan Project như sau:

Tổng quan về Project

Tổng quan về Project

Ở trên khi bấm vào nút Button Start Activity For Result thì nó sẽ truyề 2 số trong editText qua bên ActivityOutput , ở đây sẽ tính toán và trả về kết quả cho ActivityInput, mình dùng Toast để show lên đó nhé.

Chúng ta cùng đi sâu vào phân tích từng Activity nào, đầu tiên là ActivityInput.

ActivityInput.java


Ở trên trong sự kiện Onlick của nút Buton Call mình có tạo một intent để truyền số A và B qua bên màn hình Output, thì bài 20 mình có hương dẫn các bạn cách truyền dữ liệu qua activity rồi chắc các bạn còn nhớ mình không nói lại nữa.Lúc đó bạn sẽ gọi phương thức startActivity() và truyền vào đó intent, tuy nhiên đó là bài trước còn ở đây bạn truyền đi qua bên activity khác mà lắng nghe kết quả trả về thì bạn không thể dùng cách đó mà thay vào đó bạn phải gọi hàm startActivityForResut() và truyền vào đó là một intent và một requestCode (tí mình sẽ giải thích).

Và kết sau đó bạn sẽ @Override lại hàm onActivityResult() để lắng nghe xem bên activity kia trả về các gì cho bạn, Nếu bạn không ghi đè hàm này thì cũng chẳng sao cả, bạn sẽ không lấy được kết quả trả về thôi.

Tí mình sẽ quay lại giải thích chỗ này vì nó chưa được sử dụng, bây giờ bạn sẽ xem code bên ActivityOutput:

ActivityOutput.java


Lúc nãy ở AcitivityInput mình đã truyền qua 2 số A và B, thì bên đây sẽ lấy nó ra và hiển thị lên 2 EditText, đây là phương thức mình dùng để lấy:


Cứ getExtra là ra thôi, sau khi lấy mình set vào EditText đó, vì phương thức setText() yêu cầu nhập vào kiểu dữ liệu String nên mình ép kiểu số A và B sang kiểu String bằng phương thức String.valueOf() đó nhé.

Sau khi lấy xong rồi, bây giờ mình bắt sự kiện cho nút Button A+B là cộng 2 số A và B lại sau đó truyền về lại ActivityInput


Để truyền ngược lại thì bạn cũng khởi tạo một Intent rồi putExtra vào thôi, bài 20 mình đã chỉ rất rõ rồi.Tuy nhiên bạn không startActivity() rồi truyền intent vào mà là gọi phương thức setResult() và truyền vào một resutCode và intent.

Hàm finish() là để nó hủy ActivityOutput đó nhé các bạn, khi truyền dữ liệu về rồi thì hủy luôn nó.

Bây giờ ở ActivityInput sẽ goi phương thức onActivityResult() để lắng nghe xem ActivityOutput gửi cái gì về, nó chui vào phương thức này vì do ActivityOutput gọi phương thức setResult() đó nhe các bạn.

Bây giờ mình sẽ đi phân tích xem trong hàm onActivityResult() xử lý cái gì:


Bạn sẽ thấy 2 tham số là requestCode, resultCode, data đúng không?

requestCode: kiểu như là mật hiệu khi ActivityInput gửi dữ liệu đi cho một Activity nào đó,  dựa vào thằng này mà nó biết là dữ liệu được trả về từ Activity nào.

VD: Trong trường hợp ActivityA gửi đi cho 2 Activity B và C , thì cả B và C đều trả về ActivityA dữ liệu thì ActivityA sẽ dựa vào requestCode này để biết nó đến từ B hay C.

resultCode: khi một activity gửi dữ liệu về thì gọi hàm setResult() và truyền vào resultCode, và đây mà cách mà activity nhận sẽ lấy dữ liệu cho đúng trong trường hợp gửi về nhiều result và nó cũng cho bạn biết được Intent gửi về tương ứng là gì.

VD: ActivityA gửi cho ActivityB số A và B, sau đó ActivityB nhận được 2 số và thực hiện 2 phép toán trừ và cộng.ActivityB truyền lại kết quả cho A với resultcode phép cộng là 1, phép trừ là 2.Vậy ActivityA sẽ dựa vào resultCode này để biết kết quả trả về là cộng hay trừ.

data: dữ liệu gửi về sẽ lưu trong intent và đây là cái để bạn getExtra ra.

Ở trên, đầu tiền mình kiểm tra xem có activity nào gửi về với requestCode1994 không? nếu có thì nó chắc chắn là của ActivityOutput rồi vì khi nãy mình startActivityForResult() sang ActivityOutput với resquestCode là 1994 mà.

Nếu tồn tại requestCode rồi thì kiểm tra xem nó gửi về cái gì băng check resultCode ,nếu đúng với resultCode đã gửi về thì mình lấy dữ liệu tương ứng với resultCode đó trong Intent, ở đây là data bằng cách getExtra ra là xong.

Thiệt sự mình không biết các bạn có hiểu mình giải thích hết các đoạn trên không, mình đã cố gắng ghi khá chi tiết rồi tuy nhiên lý thuyết nó không trực quan nên cuối bài viết nào mình cũng để video và link project ở Github để các bạn tải về xem cho dễ hiểu.Hi vọng nếu các bạn không hiểu thì phải hỏi và nhớ phải tự tay code dù là code theo nhưng khi code chắc chắn bạn sẽ học ra được nhiều thứ lắm đấy.

Video sử dụng StarActivityForResult trong android

Download Source Code


Chúc các bạn thành công!

Tiếp theo

Bài 21: Truyền dữ liệu và lắng nghe kết quả trả về giữa các Activity
Đánh giá bài viết nhé

Add Comment

*