第一次出國是五年前的蜜月旅遊,第二次也就是本次的沖繩六天五夜自由行,

在上次蜜月旅行跟團出國的經驗中,每人團費約七萬元,讓我了解到:

1. 除了旅行社會提供接駁車、有導遊安排行程和用餐,導遊能幫的並不多,從第一步寄件到出入海關,所有應對都要自己來

2. 跟團付了一大筆錢給旅行社,到當地後還要付一筆不小的錢給旅行社配合的「地陪」,也就是整體行程中的導遊

3. 看準你跟團就是沒什麼出國經驗,你只能看導遊度過這六天,他想理你就心懷感謝,他不想理你、你也沒辦法拿他怎樣

4. 行程匆忙,順序和停留時間隨導遊決定,即使是占地很大的博物館也只保留一個多小時給你逛,想待久一點都沒辦法,公園停留的時間和博物館一樣久

5. 只有推銷需要另付錢的小行程才會興致勃勃,景點想介紹就講,不想介紹你也沒他的辦法

所以,除非有信任的導遊,不然我們花高於自由行一倍以上的大錢給旅行社賺幹什麼?還不如自由行。


自由行可以:

1. 決定要去哪些行程,決定哪些景點想停留多久

2. 決定要買多好的保險,租多好的車子

3. 至少省一半的花費

4. 運用當地的交通工具,例如單軌、計程車,也可以移動的很輕鬆

加上搜尋各大旅行社,沖繩的團費每人都兩萬以上、並包含三天無導遊、無交通工具的自由行,只提供導遊 on-call 服務,

反正除了排行程和提供接駁車,旅行社也沒額外給什麼服務了,

文章標籤

genlee 發表在 痞客邦 留言(0) 人氣()

這裡整理 Android Studio 開發 Android APP 過程時,常遇到的問題及解決方法;

1. Android Studio 安裝並載入設定後,啟動舊有 code 專案,在首次Gradle build 時總是卡住,

自行執行 compile 時會出現以下錯誤:

Gradle error : Write access is allowed from event dispatch thread only in android studio

解決方法:

採用下列作法即可恢復正常,並將整個 android studio 關閉後再重新啟動,自動載入正確的 jre 即可恢復;

File -> Project Structure -> SDK Location), 勾選 'Use embedded JDK' checkbox and set jdk location to 'path to android studio'\Android Studio\jre

2.  Error message: Session 'app': Error Installing APK

解決方法:

File->Settings->Build, Execution, Deplyment -> Instant Run->Disable "Enable Instant Run to hot swap code..."

3. Error:Execution failed for task ':app:mergeDebugResources'

解決方法:

應該是 resources 資料夾中有錯誤的資料、或不應該存在的檔案,本次的原因是我在 strings.xml 中宣告一個含有空白項目的陣列,刪除空白後就恢復正常了。

    <string-array name="content_array">
        <item>  </item>   //不應該加入這一項,會造成錯誤
        <item>家樂福</item>
        <item>大潤發</item>
        </string-array>

文章標籤

genlee 發表在 痞客邦 留言(0) 人氣()

一般程式設計時為了節省系統資源,對於時常頻繁使用的變數或陣列,宣告後會重覆使用,但這個方式在 Android Studio 中這麼做卻會造成錯誤或問題,範例如下:

public class TDB_Columns
    {
        public int iNo;
        public String sName;
        public String sLogDate;
        public String sLog;
        public int iRank;
    };
 
    //query from database and add all existed data to arraylist
    public ArrayList<TDB_Columns> query_db_to_array()
    {
        ls_Result.setAdapter(null);
        TDB_Columns DB_Columns=new TDB_Columns(); //<--------------Here is wrong
        Cursor cursor = db.rawQuery("select * from FRecord_Table", null);
 
        ArrayList<TDB_Columns> arrayStrings = new ArrayList<TDB_Columns>();
        cursor.moveToFirst();
        int iCount=0;
        while (cursor.moveToNext()) {
 
            DB_Columns.iNo=cursor.getInt(0);
            DB_Columns.sLogDate=cursor.getString(1);
            DB_Columns.sName=cursor.getString(2);
            DB_Columns.sLog=cursor.getString(3);
            DB_Columns.iRank=cursor.getInt(4);
            arrayStrings.add(iCount, DB_Columns);
            iCount++;
        }
        cursor.close();
        return arrayStrings;
    }

可以看到,因為 while 迴圈中會不斷以 DB_Columns 去儲存資料表中的資料,供後續使用,
所以我宣告一次 DB_Columns 物件後就重覆使用,因而造成編譯或執行過程中不如預期的問題。

 

正確的作法應該是:

 public ArrayList<TDB_Columns> query_db_to_array()
    {
        ls_Result.setAdapter(null);
        Cursor cursor = db.rawQuery("select * from FRecord_Table", null);
 
        ArrayList<TDB_Columns> arrayStrings = new ArrayList<TDB_Columns>();
        cursor.moveToFirst();
        int iCount=0;
        while (cursor.moveToNext()) {
            TDB_Columns DB_Columns=new TDB_Columns();  //<---Shall new a object here every time
            DB_Columns.iNo=cursor.getInt(0);
            DB_Columns.sLogDate=cursor.getString(1);
            DB_Columns.sName=cursor.getString(2);
            DB_Columns.sLog=cursor.getString(3);
            DB_Columns.iRank=cursor.getInt(4);
            arrayStrings.add(iCount, DB_Columns);
            iCount++;
        }
        cursor.close();
        return arrayStrings;
    }

文章標籤

genlee 發表在 痞客邦 留言(0) 人氣()

設定位於兩個地方,分別是 HKEY_LOCAL_MACHINE 和 HKEY_CURRENT_USER;

1. HKEY_LOCAL_MACHINE

HKEY_LOCAL_MACHINE
 -SOFTWARE
   -ODBC
    -Odbc.ini

 

2. HKEY_CURRENT_USER:

HKEY_CURRENT_USER
 -SOFTWARE
   -ODBC
    -Odbc.ini

文章標籤

genlee 發表在 痞客邦 留言(0) 人氣()

以下程式碼為自己參考相關資料,並依個人常用的需求編寫出的常用函數,

包括新建資料庫、新建資料表、清除資料、新增資料到資料庫中、查詢資料 (讀取資料)、篩選查詢資料。

 

Step 1: 建立資料表並儲存為 DBHelper.java,Android 

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
 
public class DBHelper extends SQLiteOpenHelper {
    private static final String DB_NAME = "my.db";
    private static final int DB_VERSION = 1;
    private final static String _TableName = "Invoice_Item_Table"; //<-- table name
    public DBHelper(Context context) {
        super(context, DB_NAME, null, DB_VERSION);
    }
 
    @Override
    public void onCreate(SQLiteDatabase db) {
        final String SQL = "CREATE TABLE IF NOT EXISTS " + _TableName + "( " +
        "_id INTEGER PRIMARY KEY AUTOINCREMENT, " +
        "_TITLE VARCHAR(50)" + ");";
        db.execSQL(SQL);
 
    }
 
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        final String SQL = "DROP TABLE " + _TableName;
        db.execSQL(SQL);
    }
}

Step 2: 初始化資料庫變數:

private DBHelper DH = null;
    private SQLiteDatabase db;
 
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        DH=new DBHelper(this);
        db = DH.getWritableDatabase();
    }

Step 3: 建立資料庫常用函數:

//Insert New record to Table
    private void add(String Title){
        ContentValues values = new ContentValues();
        values.put("_TITLE", Title.toString());
        db.insert("Invoice_Item_Table", null, values);
    }
 
    //read data from table
    public ArrayList<String> query_db_to_array()
    {
        list_Item.setAdapter(null);
        Cursor cursor = db.rawQuery("select * from Invoice_Item_Table", null);
 
        ArrayList<String> arrayStrings = new ArrayList<String>();
 
        while (cursor.moveToNext()) {
            String sItemName=cursor.getString(1);
            arrayStrings.add(sItemName);
        }
        cursor.close();
        return arrayStrings;
    }
 
    //clear table
    public void clear_db()
    {
        db.execSQL("delete from Invoice_Item_Table");
    }
 
    //close db
    private void closeDB()
    {
        DH.close();
    }
 
    @Override
    protected void onDestroy() {
        super.onDestroy();
        closeDB();
    }

文章標籤

genlee 發表在 痞客邦 留言(0) 人氣()

周末假期帶小孩去逛玩具工廠,位於台南市永康區永大路附近的崑山玩具精品

碰巧看到門口擺 MIMI WORLD 迷你MIMI甜蜜夢想小屋,特價 599 元,看起來蠻精緻的,就買了!

後來玩完玩具,查詢一下網拍才知道… 每家都標價 900 元以上👀

箱子的右邊封面是完成圖,只有一間臥室、一間浴室,不包括封面中下方畫的六間房間!

因為最後組裝完成後才發現,本來買的時候以為是有六間房間,覺得有點失望 😔,

其他四間只有預留孔位讓玩家另購房間套組來擴充用的,

那就開始組裝啦~

MIMI WORLD 迷你MIMI甜蜜夢想小屋 開箱、組裝好好玩

MIMI WORLD 迷你MIMI甜蜜夢想小屋 開箱、組裝好好玩

MIMI WORLD 迷你MIMI甜蜜夢想小屋 開箱、組裝好好玩

開心地打開箱子,看到滿滿的材料組,有種看到日本動畫中組裝鋼彈模型的感覺

MIMI WORLD 迷你MIMI甜蜜夢想小屋 開箱、組裝好好玩

主角和她的狗狗

MIMI WORLD 迷你MIMI甜蜜夢想小屋 開箱、組裝好好玩

後來才知道這個洗澡時要穿的衣服

MIMI WORLD 迷你MIMI甜蜜夢想小屋 開箱、組裝好好玩

文章標籤

genlee 發表在 痞客邦 留言(0) 人氣()