Bài 34-Đọc JSon tỉ giá hối đoái của Ngân Hàng Đông Á trong Kotlin – Bài 3


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):


/**
* 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"
}
}

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)


/**
* Created by cafe on 03/06/2017.
*/
class TiGia {
var items:MutableList<Item> = mutableListOf()
}

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.:


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<String>) {
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<TiGia>(s,TiGia::class.java)
for (item in dstg.items)
{
println(item)
println("-------------------------------")
}
}

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

——————————-
Mã Tiền Tệ : CNY
Mua tiền mặt :3000
Bán tiền mặt :3500
Mua chuyển khoản :3000
Bán chuyển khoản :3500
Hình đại diện :http://www.dongabank.com.vn/images/flag/CNY.gif

——————————-
Mã Tiền Tệ : EUR
Mua tiền mặt :25460
Bán tiền mặt :25750
Mua chuyển khoản :25480
Bán chuyển khoản :25750
Hình đại diện :http://www.dongabank.com.vn/images/flag/EUR.gif

——————————-
Mã Tiền Tệ : GBP
Mua tiền mặt :29070
Bán tiền mặt :29450
Mua chuyển khoản :29110
Bán chuyển khoản :29450
Hình đại diện :http://www.dongabank.com.vn/images/flag/GBP.gif

——————————-
Mã Tiền Tệ : HKD
Mua tiền mặt :2550
Bán tiền mặt :2940
Mua chuyển khoản :2900
Bán chuyển khoản :2940
Hình đại diện :http://www.dongabank.com.vn/images/flag/HKD.gif

——————————-
Mã Tiền Tệ : JPY
Mua tiền mặt :204.3
Bán tiền mặt :206.7
Mua chuyển khoản :204.6
Bán chuyển khoản :206.7
Hình đại diện :http://www.dongabank.com.vn/images/flag/JPY.gif

——————————-
Mã Tiền Tệ : NZD
Mua tiền mặt :
Bán tiền mặt :
Mua chuyển khoản :16120
Bán chuyển khoản :16320
Hình đại diện :http://www.dongabank.com.vn/images/flag/NZD.gif

——————————-
Mã Tiền Tệ : PNJ_DAB
Mua tiền mặt :3495000
Bán tiền mặt :3545000
Mua chuyển khoản :3495000
Bán chuyển khoản :3545000
Hình đại diện :http://www.dongabank.com.vn/images/flag/PNJ_DAB.gif

——————————-
Mã Tiền Tệ : SGD
Mua tiền mặt :16320
Bán tiền mặt :16540
Mua chuyển khoản :16340
Bán chuyển khoản :16540
Hình đại diện :http://www.dongabank.com.vn/images/flag/SGD.gif

——————————-
Mã Tiền Tệ : THB
Mua tiền mặt :595
Bán tiền mặt :655
Mua chuyển khoản :625
Bán chuyển khoản :655
Hình đại diện :http://www.dongabank.com.vn/images/flag/THB.gif

——————————-
Mã Tiền Tệ : USD
Mua tiền mặt :22680
Bán tiền mặt :22750
Mua chuyển khoản :22680
Bán chuyển khoản :22750
Hình đại diện :http://www.dongabank.com.vn/images/flag/USD.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://ssoftinc.com/)

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: