[polldaddy poll=9764234]
Tui đã trình bày kỹ cách sử dụng JSon trong Kotlin ở các bài 32, bài 33 . Tui muốn minh họa thêm một ví dụ cuối cùng về đọc JSon trong Kotlin, trong bài này Tui sẽ coding lấy Tỉ giá hối đoái của Ngân Hàng Đông Á cung cấp:
bạn vào link này để xem Webservice API cung Tỉ giá hối đoái của DongA Bank: http://dongabank.com.vn/exchange/export
Đây là kết quả (nó luôn chính xác và thời gian thực nhé các bạn, hàng ngày Ngân hàng Đông Á luôn cập nhật giá khi có sự thay đổi):
({“items”:[{“type”:”CAD”,”imageurl”:”http:\/\/www.dongabank.com.vn\/images\/flag\/CAD.gif”,”muatienmat”:”16720″,”muack”:”16740″,”bantienmat”:”16930″,”banck”:”16930″},{“type”:”XAU”,”imageurl”:”http:\/\/www.dongabank.com.vn\/images\/flag\/XAU.gif”,”muatienmat”:”3632000″,”muack”:”3621000″,”bantienmat”:”3655000″,”banck”:”3621000″},{“type”:”AUD”,”imageurl”:”http:\/\/www.dongabank.com.vn\/images\/flag\/AUD.gif”,”muatienmat”:”16790″,”muack”:”16800″,”bantienmat”:”16980″,”banck”:”17000″},{“type”:”CHF”,”imageurl”:”http:\/\/www.dongabank.com.vn\/images\/flag\/CHF.gif”,”muatienmat”:”23430″,”muack”:”23450″,”bantienmat”:”23730″,”banck”:”23730″},{“type”:”CNY”,”imageurl”:”http:\/\/www.dongabank.com.vn\/images\/flag\/CNY.gif”,”muatienmat”:”3000″,”muack”:”3000″,”bantienmat”:”3500″,”banck”:”3500″},{“type”:”EUR”,”imageurl”:”http:\/\/www.dongabank.com.vn\/images\/flag\/EUR.gif”,”muatienmat”:”25460″,”muack”:”25480″,”bantienmat”:”25750″,”banck”:”25750″},{“type”:”GBP”,”imageurl”:”http:\/\/www.dongabank.com.vn\/images\/flag\/GBP.gif”,”muatienmat”:”29070″,”muack”:”29110″,”bantienmat”:”29450″,”banck”:”29450″},{“type”:”HKD”,”imageurl”:”http:\/\/www.dongabank.com.vn\/images\/flag\/HKD.gif”,”muatienmat”:”2550″,”muack”:”2900″,”bantienmat”:”2940″,”banck”:”2940″},{“type”:”JPY”,”imageurl”:”http:\/\/www.dongabank.com.vn\/images\/flag\/JPY.gif”,”muatienmat”:”204.3″,”muack”:”204.6″,”bantienmat”:”206.7″,”banck”:”206.7″},{“type”:”NZD”,”imageurl”:”http:\/\/www.dongabank.com.vn\/images\/flag\/NZD.gif”,”muatienmat”:””,”muack”:”16120″,”bantienmat”:””,”banck”:”16320″},{“type”:”PNJ_DAB”,”imageurl”:”http:\/\/www.dongabank.com.vn\/images\/flag\/PNJ_DAB.gif”,”muatienmat”:”3495000″,”muack”:”3495000″,”bantienmat”:”3545000″,”banck”:”3545000″},{“type”:”SGD”,”imageurl”:”http:\/\/www.dongabank.com.vn\/images\/flag\/SGD.gif”,”muatienmat”:”16320″,”muack”:”16340″,”bantienmat”:”16540″,”banck”:”16540″},{“type”:”THB”,”imageurl”:”http:\/\/www.dongabank.com.vn\/images\/flag\/THB.gif”,”muatienmat”:”595″,”muack”:”625″,”bantienmat”:”655″,”banck”:”655″},{“type”:”USD”,”imageurl”:”http:\/\/www.dongabank.com.vn\/images\/flag\/USD.gif”,”muatienmat”:”22680″,”muack”:”22680″,”bantienmat”:”22750″,”banck”:”22750″}]})
Như chúng ta đã học ở những bài lý thuyết Json thì đây không phải là cấu trúc Json. Vì cấu trúc JSon chỉ chấp nhận 2 loại đó là: Dữ liệu được để trong {} hoặc được để trong [] . Còn ở đây Ngân Hàng Đông Á lại để () ở ngoài. Do đó lúc đọc dữ liệu về ta chỉ cần Remove 2 ký tự này đi là xong.
Tiếp tục phân tích cấu trúc của Json ở trên:
Rõ ràng ở ngoài là 1 đối tượng JSonObject, bên trong nó có một JSonArray đặt tên là items. Mỗi đối tượng trong mảng Items có 6 thuộc tính như ở trên.
Bây giờ ta tạo một Project, và đưa thư viện gson-2.8.1.jar như các bài trước vào (bạn tự làm vì Tui đã hướng dẫn rất chi tiết ở các bài trước ), rồi tiến hành tạo các lớp sau:
Lớp Item để lưu trữ các dữ liệu bên trong mảng items (chú ý là các thuộc tính phải copy paste y xì từ dữ liệu JSon mà Đông Á Bank cung cấp):
[code language=”groovy”]
/**
* Created by cafe on 03/06/2017.
*/
class Item {
var type:String=””
var imageurl:String=””
var muatienmat:String=””
var muack:String=””
var bantienmat:String=””
var banck:String=””
override fun toString(): String {
return “Mã Tiền Tệ : “+type+”\n”+
“Mua tiền mặt :”+muatienmat+”\n”+
“Bán tiền mặt :”+bantienmat+”\n”+
“Mua chuyển khoản :”+muack+”\n”+
“Bán chuyển khoản :”+banck+”\n”+
“Hình đại diện :”+imageurl+”\n”
}
}
[/code]
Tiếp theo tạo 1 Lớp tỉ giá để lưu trữ mảng items
Các bạn cần nhớ là với GSon nó không quan tâm tên Lớp là gì(đặt tên gì cũng được), nó quan tâm tên thuộc tính (phải đặt chính xác như dữ liệu Json cũng cấp)
[code language=”groovy”]
/**
* Created by cafe on 03/06/2017.
*/
class TiGia {
var items:MutableList = mutableListOf()
}
[/code]
Cuối cùng tạo hàm main để kiểm tra lấy dữ liệu từ Ngân Hàng Đông Á, chú ý ta dùng HttpURLConnection để lấy dữ liệu từ Webservice API mà Đông Á Cung cấp.:
[code language=”groovy”]
import com.google.gson.Gson
import java.io.BufferedReader
import java.io.InputStreamReader
import java.net.HttpURLConnection
import java.net.URL
/**
* Created by cafe on 03/06/2017.
*/
fun main(args: Array) {
var url:URL=URL(“http://dongabank.com.vn/exchange/export”)
var connection:HttpURLConnection= url.openConnection() as HttpURLConnection
var isr:InputStreamReader= InputStreamReader(connection.inputStream,”UTF-8″)
var br:BufferedReader=BufferedReader(isr)
var s= br.readText()
br.close()
isr.close()
s=s.replace(“(“,””)
s=s.replace(“)”,””)
var gs:Gson= Gson()
var dstg:TiGia=gs.fromJson(s,TiGia::class.java)
for (item in dstg.items)
{
println(item)
println(“——————————-“)
}
}
[/code]
Khi chạy hàm main ở trên thì ta có kết quả sau:
Mã Tiền Tệ : CAD Mua tiền mặt :16720 Bán tiền mặt :16930 Mua chuyển khoản :16740 Bán chuyển khoản :16930 Hình đại diện :http://www.dongabank.com.vn/images/flag/CAD.gif——————————- Mã Tiền Tệ : XAU Mua tiền mặt :3632000 Bán tiền mặt :3655000 Mua chuyển khoản :3621000 Bán chuyển khoản :3621000 Hình đại diện :http://www.dongabank.com.vn/images/flag/XAU.gif——————————- Mã Tiền Tệ : AUD Mua tiền mặt :16790 Bán tiền mặt :16980 Mua chuyển khoản :16800 Bán chuyển khoản :17000 Hình đại diện :http://www.dongabank.com.vn/images/flag/AUD.gif——————————- Mã Tiền Tệ : CHF Mua tiền mặt :23430 Bán tiền mặt :23730 Mua chuyển khoản :23450 Bán chuyển khoản :23730 Hình đại diện :http://www.dongabank.com.vn/images/flag/CHF.gif ——————————- ——————————- ——————————- ——————————- ——————————- ——————————- ——————————- ——————————- ——————————- ——————————- ——————————- |
Như vậy ta đã Ví dụ xong trường hợp đọc JSon từ 1 Webservice, cụ thể là Tỉ giá hối đoái của Ngân Hàng Đông Á, các bạn tự áp dụng vào các dự án cụ thể nhé. Các bài sau Tui sẽ hướng dẫn thiết kế giao diện (GUI) trong Kotlit, các bạn chú ý theo dõi nhé
Các bạn có thể tải source code bài này ở đây: http://www.mediafire.com/file/hghudhgyo53ra8g/HocJsonDongABank.rar
Hẹn gặp các bạn ở những bài tiếp theo
Chúc các bạn thành công!
Trần Duy Thanh (http://communityuni.com/)
One thought on “Bài 34-Đọc JSon tỉ giá hối đoái của Ngân Hàng Đông Á trong Kotlin – Bài 3”