|
เป็นบทความแรกในรอบหลายปี สำหรับ B4A (Basic For Android) ภาษาเบสิคบนระบบปฏิบัติการแอนดรอยด์ ซึ่งปัจจุบันนี้ B4A กลายเป็น Open Source และฟรีโปรแกรมเป็นที่เรียบร้อย ... สำหรับโค้ดชุดนี้เราจะทำการอ่านค่า URL จากรายงานของต่างประเทศ ข้อมูลที่ถูกส่งกลับมาจะอยู่ในรูปแบบของ JSON ซึ่งเราต้องมาทำการเขียนโค้ดเพื่อแยกแยะ (Parser) ข้อมูลต่างๆออกมา ...
ดาวน์โหลด B4A เพื่อทำการติดตั้งใช้งานฟรี ...
ดาวน์โหลดโค้ดต้นฉบับ Covid-19 ประเทศไทย (โค้ด B4A) ...
ลิ้งค์รับค่า JSON ... https://coronavirus-19-api.herokuapp.com/countries/thailand
รูปแบบที่ถูกส่งกลับมา หากเลือกจากประเทศ จะไม่มีเครื่องหมาย Bracket [ ] ปิดหัวท้ายให้ ดังนั้นเราจึงต้องจัดรูปแบบใหม่ ...
- {"country":"Thailand","cases":3135,"todayCases":0,"deaths":58,"todayDeaths":0,"recovered":2996,"active":81,"critical":1,"casesPerOneMillion":45,"deathsPerOneMillion":0,"totalTests":468175,"testsPerOneMillion":6708}
คัดลอกไปที่คลิปบอร์ด
การใช้ JSON Tree Example เพื่อทำการแยกข้อมูล และจะได้โค้ดเพื่อนำไปใช้กับ B4A หรือตระกูล B4X ... หรือเข้าไปที่ http://basic4ppc.com:51042/json/index.html
ที่เก็บไฟล์ Libraries ของ B4A ... หากท่านไม่มี Libraries 2 ตัวนี้ แอดมินได้เก็บไว้ในไฟล์ Zip ให้เรียบร้อย จากนั้นก็แตกไฟล์ออกมา คัดลอกมาวางไว้ที่นี่ก่อนด้วยล่ะครับ
ก่อนจะเขียนโค้ด เราต้องเลือก Libraries มาใช้งานก่อน ... หากนำไฟล์ Libraries 2 ตัวไปเก็บไว้ใน C:\Program Files (x86)\Anywhere Software\Basic4android\Libraries ภายหลัง ให้คลิ๊กเมาส์ขวาเลือก Refresh ก็จะเห็นชื่อไฟล์ปรากฏขึ้นมา ...
หน้าจอการ Designer จาก B4A เลือกเมนู Designer --> Open Designer ... ขอให้พิจารณาคุณสมบัติ (Properties) ในการจัดรูปแบบต่างๆให้กับ Label แต่ละตัวเองด้วยครับ ...
มาดูโค้ดฉบับเต็ม B4A กันเถอะ ... - Sub Process_Globals
- 'These global variables will be declared once when the application starts.
- 'These variables can be accessed from all modules.
- End Sub
- Sub Globals
- 'These global variables will be redeclared each time the activity is created.
- 'These variables can only be accessed from this module.
- '// พวก Label ที่เป็นค่าคงที่ ไม่จำเป็นต้อง Generate หรือประกาศตัวแปร
- Private lblTodayCases As Label
- Private lblRecovered As Label
- Private lblCases As Label
- Private lblDeaths As Label
- Private lblHeader As Label
- Private lblTodayDeaths As Label
- Private lblActive As Label
- End Sub
- Sub Activity_Create(FirstTime As Boolean)
- 'Do not forget to load the layout file created with the visual designer. For example:
- Activity.LoadLayout("main")
- '
- Dim cov1 As HttpJob
- cov1.Initialize("GetAddress", Me)
- '// โหลด JSON เข้ามา
- cov1.Download("https://coronavirus-19-api.herokuapp.com/countries/thailand")
- Wait For (cov1) JobDone(cov1 As HttpJob)
- '// หากดาวน์โหลดสำเร็จ
- If cov1.Success Then
- ProgressDialogHide
- '// รูปแบบ JSON ที่ได้รับมา จะไม่มี Bracket [] ปิดหัวท้าย
- '// {"country":"Thailand","cases":3135,"todayCases":0,"deaths":58,"todayDeaths":0,"recovered":2987,
- '// "active":90,"critical":1,"casesPerOneMillion":45,"deathsPerOneMillion":0,"totalTests":468175,"testsPerOneMillion":6708}
- Dim parser As JSONParser
- '// ใส่ Bracket ให้กับชุดรูปแบบข้อมูล JSON แล้วทำการแยกแยะข้อมูล (Parser)
- parser.Initialize("[" & cov1.GetString & "]")
- 'Log("parser started ")
- DateTime.DateFormat="dd/MM/yyyy"
- lblHeader.Text="สถานะการณ์โควิด-19 วันที่ " & DateTime.Date(DateTime.now)
- '//
- Dim root As List = parser.NextArray
- '// ลูปรายการเพื่อรับค่า
- For Each colC As Map In root
- lblTodayCases.Text = NumberFormat2(colC.Get("todayCases"), 0, 2, 0, True)
- lblRecovered.Text = NumberFormat2(colC.Get("recovered"), 0,2,0, True)
- lblCases.Text = NumberFormat2(colC.Get("cases"), 0,2,0, True)
- lblActive.Text = NumberFormat2(colC.Get("active"), 0,2,0, True)
- lblTodayDeaths.Text = NumberFormat2(colC.Get("todayDeaths"), 0,2,0, True)
- lblDeaths.Text = NumberFormat2(colC.Get("deaths"), 0,2,0, True)
- Next
- End If
- cov1.Release
- End Sub
- Sub Activity_Resume
- End Sub
- Sub Activity_Pause (UserClosed As Boolean)
- End Sub
คัดลอกไปที่คลิปบอร์ด
|
|