沒錯,傑夫老師最近在玩 App Inventor,正好研究到 Firebase Realtime Database 的部分,而且發現 App Inventor 與 Python 程式上很多不同的用法與結果,網路上找了半天也沒人說的清楚,那傑夫老師只好寫下來供自己也供大家參考,有任何問題可與傑夫老師討論喔!
除了說明用的是 App Inventor 中歸類於 Experimental 的 FirebaseDB 元件外,其他 Firebase Realtime Database 的建立與 App Inventor 基礎就不多說,直接進入主題。
(AI2: App Inventor 縮寫、FDB: Firebase Realtime Database 縮寫)
上一 part 的最後已經可以取出各筆資料的 Score 值並算出總和了,總筆數另外存在 Tag: LastNumber 中,不過是在 Python 上面完成的,不要忘了如果是從 AI2 輸入,資料內容都會多加 " " (一對雙引號) 被當成字串。
先來看看 AI2 中存資料的程式要怎麼寫:
存資料的程式
存了三筆資料後的 FDB 內容,看起來除了值都被加了 " " (雙引號) 看來無異。
但按下 Read All 鈕後,AI2 出現以下錯誤訊息:
The operation + cannot accept the arguments: , [0], [""20""]
看來是在算總和的時候出錯了!沒錯,就是雙引號搞的鬼,Score 中的數字都變成字串不能相加了。
存了三筆資料後的 FDB 內容
AI2 中只列出了三個 Score 值,卻算不出總和。仔細看,每個數字都被 "" "" (兩對雙引號)包住。
將文字轉成數字的方法
但這樣只會避免 Score 的值被加上兩對雙引號,Python讀取時還是會把它當成字串,所以 Python 程式也要做修改,利用 int 強迫轉型:
sum=0
for item in datas:
print(item["Name"].strip('"'), item["Score"])
sum+=int(item["Score"])
print(sum)
Name 的值如果需要,也可以用 strip 將多餘的 " " (雙引號) 刪掉喔!
輸出結果就正確了:
[{'Name': '"Tie"', 'Score': '50'}, {'Name': '"Uno"', 'Score': '60'}] <class 'list'>
Tie 50
Uno 60
110
終於把 Firebase, App Inventor 與 Python 搞清楚了,合理的資料庫結構、簡單明瞭的程式還有 AI2 造成的雙印號問題都處理好了,研究這些問題最主要的目的就是要在不同的環境 (Python, AI2) 下都能便利的使用雲端 Firebase 資料庫,雖然這裡面還有很多眉角,但傑夫老師就此打住,想瞭解更深的可以跟傑夫老師聯絡討論喔。謝謝 Bye now~