ชุมชนคนรักภาษาเบสิค - Visual Basic Community

 ลืมรหัสผ่าน
 ลงทะเบียน
ค้นหา
ดู: 561|ตอบกลับ: 0

[B4A] รายงานข้อมูลสถานะการณ์โควิด-19 ประเทศไทย ผ่านทาง API (Json)

[คัดลอกลิงก์]

252

กระทู้

367

โพสต์

3066

เครดิต

ผู้ดูแลระบบ

Rank: 9Rank: 9Rank: 9

เครดิต
3066



เป็นบทความแรกในรอบหลายปี สำหรับ B4A (Basic For Android) ภาษาเบสิคบนระบบปฏิบัติการแอนดรอยด์ ซึ่งปัจจุบันนี้ B4A กลายเป็น Open Source และฟรีโปรแกรมเป็นที่เรียบร้อย ... สำหรับโค้ดชุดนี้เราจะทำการอ่านค่า URL จากรายงานของต่างประเทศ ข้อมูลที่ถูกส่งกลับมาจะอยู่ในรูปแบบของ JSON ซึ่งเราต้องมาทำการเขียนโค้ดเพื่อแยกแยะ (Parser) ข้อมูลต่างๆออกมา ...

ดาวน์โหลด B4A เพื่อทำการติดตั้งใช้งานฟรี ...

ดาวน์โหลดโค้ดต้นฉบับ Covid-19 ประเทศไทย (โค้ด B4A) ...

ลิ้งค์รับค่า JSON ... https://coronavirus-19-api.herokuapp.com/countries/thailand
รูปแบบที่ถูกส่งกลับมา หากเลือกจากประเทศ จะไม่มีเครื่องหมาย Bracket [ ] ปิดหัวท้ายให้ ดังนั้นเราจึงต้องจัดรูปแบบใหม่ ...
  1. {"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 กันเถอะ ...
  1. Sub Process_Globals
  2.         'These global variables will be declared once when the application starts.
  3.         'These variables can be accessed from all modules.

  4. End Sub

  5. Sub Globals
  6.         'These global variables will be redeclared each time the activity is created.
  7.         'These variables can only be accessed from this module.
  8.         '// พวก Label ที่เป็นค่าคงที่ ไม่จำเป็นต้อง Generate หรือประกาศตัวแปร
  9.         Private lblTodayCases As Label
  10.         Private lblRecovered As Label
  11.         Private lblCases As Label
  12.         Private lblDeaths As Label
  13.         Private lblHeader As Label
  14.         Private lblTodayDeaths As Label
  15.         Private lblActive As Label
  16. End Sub

  17. Sub Activity_Create(FirstTime As Boolean)
  18.         'Do not forget to load the layout file created with the visual designer. For example:
  19.         Activity.LoadLayout("main")
  20.         '
  21.         Dim cov1 As HttpJob
  22.         cov1.Initialize("GetAddress", Me)
  23.         '// โหลด JSON เข้ามา
  24.         cov1.Download("https://coronavirus-19-api.herokuapp.com/countries/thailand")
  25.         Wait For (cov1) JobDone(cov1 As HttpJob)
  26.         '// หากดาวน์โหลดสำเร็จ
  27.         If cov1.Success Then
  28.                 ProgressDialogHide
  29.                 '// รูปแบบ JSON ที่ได้รับมา จะไม่มี Bracket [] ปิดหัวท้าย
  30.                 '// {"country":"Thailand","cases":3135,"todayCases":0,"deaths":58,"todayDeaths":0,"recovered":2987,
  31.                 '// "active":90,"critical":1,"casesPerOneMillion":45,"deathsPerOneMillion":0,"totalTests":468175,"testsPerOneMillion":6708}
  32.                 Dim parser As JSONParser
  33.                 '// ใส่ Bracket ให้กับชุดรูปแบบข้อมูล JSON แล้วทำการแยกแยะข้อมูล (Parser)
  34.                 parser.Initialize("[" & cov1.GetString & "]")
  35.                 'Log("parser started ")
  36.                 DateTime.DateFormat="dd/MM/yyyy"
  37.                 lblHeader.Text="สถานะการณ์โควิด-19 วันที่ " & DateTime.Date(DateTime.now)
  38.                 '//
  39.                 Dim root As List = parser.NextArray
  40.                 '// ลูปรายการเพื่อรับค่า
  41.                 For Each colC As Map In root
  42.                         lblTodayCases.Text = NumberFormat2(colC.Get("todayCases"), 0, 2, 0, True)
  43.                         lblRecovered.Text = NumberFormat2(colC.Get("recovered"), 0,2,0, True)
  44.                         lblCases.Text = NumberFormat2(colC.Get("cases"), 0,2,0, True)
  45.                         lblActive.Text = NumberFormat2(colC.Get("active"), 0,2,0, True)
  46.                         lblTodayDeaths.Text = NumberFormat2(colC.Get("todayDeaths"), 0,2,0, True)
  47.                         lblDeaths.Text = NumberFormat2(colC.Get("deaths"), 0,2,0, True)
  48.                 Next
  49.         End If
  50.         cov1.Release
  51. End Sub

  52. Sub Activity_Resume

  53. End Sub

  54. Sub Activity_Pause (UserClosed As Boolean)

  55. End Sub
คัดลอกไปที่คลิปบอร์ด


สิ่งที่ดีกว่าการให้ คือการให้แบบไม่มีที่สิ้นสุด
ขออภัย! คุณไม่ได้รับสิทธิ์ในการดำเนินการในส่วนนี้ กรุณาเลือกอย่างใดอย่างหนึ่ง ลงชื่อเข้าใช้ | ลงทะเบียน

รายละเอียดเครดิต

ข้อความล้วน|อุปกรณ์พกพา|ประวัติการแบน|G2GNet.com  

GMT+7, 2020-9-21 09:58 , Processed in 0.262783 second(s), 4 queries , File On.

Powered by Discuz! X3.3 R20170401, Rev.54

© 2001-2017 Comsenz Inc.

ตอบกระทู้ ขึ้นไปด้านบน ไปที่หน้ารายการกระทู้