2016年11月26日 星期六

Android-Open Data 彙整

此篇是收集各公家機關或公開的資訊存取連結
如有侵犯到,請務必留言告知,非常感謝您。

台北市政府
/ 休閒旅遊 /
  1. 臺北市藍色公路碼頭
  2. 臺北市101個觀光亮點資料
  3. 臺北市運動中心
  4. 臺北市河濱輕食區
  5. 臺北市河濱自行車道景點
  6. 臺北市六大自行車道
歡迎轉載,請註明出處。

2016年11月23日 星期三

2016年11月22日 星期二

Python-將資料送至 FireBase

隨著物聯裝置多樣性
儲存的資料也越來越多
相對的我們要在資料儲存要更方便才行
像是 ThingSpeak 是最常見的
這篇則是用 Google 提供的 FireBase

參考資料 : 透過 Python 傳送溫溼度資訊到 Google Firebase

2016年11月13日 星期日

Android-FireBase Realtime Database_新

如要用此功能
請將 FireBase 的前置作業 完成

此文章會介紹我們比較常用到的方法以及儲存方式
因為網路上教學文也經非常多
所以流程就用文字帶過

1 . google-services
build.gradle {
  classpath 'com.google.gms:google-services:3.0.0'
}

2 . firebase core
app -> build.gradle
 apply plugin: 'com.google.gms.google-services'
 .
 .
 .
 build.gradle{
    .
    .
    .
     compile 'com.google.firebase:firebase-core:9.2.0'
 }

3 . firebase database
app -> build.gradle
build.gradle{
    .
    .
    .
    compile 'com.google.firebase:firebase-database:9.2.0'
}

4 . 使用讀取資料,編寫資料
package com.bluecom.soprt.tool;

import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.database.ValueEventListener;

public class FireBaseDataBaseTool {

    /**
     * 讀取資料
     * @param columnName
     * @param valueEventListener 持續監聽
     */
    public static void RetrieveDateValueEvent(String columnName, 
                                                ValueEventListener valueEventListener) {
        if(columnName != null) {
            FirebaseDatabase mFireBaseDatabase = FirebaseDatabase.getInstance();
            DatabaseReference databaseReference = mFireBaseDatabase.getReference(columnName);
            databaseReference.addValueEventListener(valueEventListener);
        }

    }

    /**
     * 讀取資料
     * @param columnName
     * @param valueEventListener 單次監聽
     */
    public static void RetrieveDateSingleValueEvent(String columnName, 
                                                        ValueEventListener valueEventListener) {
        if(columnName != null) {
            FirebaseDatabase mFireBaseDatabase = FirebaseDatabase.getInstance();
            DatabaseReference databaseReference = mFireBaseDatabase.getReference(columnName);
            databaseReference.addListenerForSingleValueEvent(valueEventListener);
        }

    }

    /**
     * 儲存資料
     * @param columnName
     * @param key
     * @param value
     * @param valueEventListener 連續監聽
     */
    public static void SaveDate(String columnName, String key,  String value, 
                                    ValueEventListener valueEventListener) {
        if(columnName != null && key != null) {
            FirebaseDatabase mFireBaseDatabase = FirebaseDatabase.getInstance();
            DatabaseReference databaseReference = mFireBaseDatabase.getReference(columnName);
            databaseReference.child(key).setValue(value);
            databaseReference.addValueEventListener(valueEventListener);
        }
    }

    /**
     * 儲存資料
     * @param key
     * @param columnName
     * @param value
     * @param valueEventListener 連續監聽
     */
    public static void SaveDateSingleValueEvent(String columnName, String key,  String value, 
                                                    ValueEventListener valueEventListener) {
        if(columnName != null && key != null) {
            FirebaseDatabase mFireBaseDatabase = FirebaseDatabase.getInstance();
            DatabaseReference databaseReference = mFireBaseDatabase.getReference(columnName);
            databaseReference.child(key).setValue(value);
            databaseReference.addListenerForSingleValueEvent(valueEventListener);
        }
    }

}

5 . 介紹 FireBase 儲存的格式
FireBase 是以 JSONTree 儲存
和我們常見的 DB 儲存方法是不太相同
採用重點式儲存
 Key 加上 Value
可以參考官方範例 : Structure Your Database

6 . 上方程式碼常用到的置入參數
{
  "Members" : {
    "Allen" : {
      "NO" : "002",
      "Phone" : "02-22226666",
      "Sex" : "男"
    },
    "Tina" : {
      "NO" : "003",
      "Phone" : "02-22226666",
      "Sex" : "女"
    }
  }
}


Reference : 如果要取所有會員資料,那在輸入參數內輸入 : Members
                    如果要取 Tina 會員資料,那在輸入參數內輸入 : Members/Tina
Key :  有點像是 Java Map 感覺,如果要取 Allen 的編號,Key 輸入 : NO
Value : 同上

7 . 重點 !!!
為什麼要有持續監聽和單次監聽
addValueEventListener :持續監聽
持續監聽是資料只要有變化,就會有改變的狀態。

addListenerForSingleValueEvent  : 單次監聽
單次監聽是,我這次儲存完資料後立即取得到回饋
並且結束工作。