4.01.2015

[Draft] getFragmentManager() vs. getSupportFragmentManager()

The ActionBar APIs were first added in Android 3.0 (API level 11) but they are also available in the Support Library for compatibility with Android 2.1 (API level 7) and above. This guide focuses on how to use the support library's action bar, but if your app supports only Android 3.0 or higher, you should use the ActionBar APIs in the framework. Most of the APIs are the same—but reside in a different package namespace—with a few exceptions to method names or signatures that are noted in the sections below. Caution: Be certain you import the ActionBar class (and related APIs) from the appropriate package: If supporting API levels lower than 11: import android.support.v7.app.ActionBar If supporting only API level 11 and higher: import android.app.ActionBar in the same case: If supporting API levels lower than 11: use getSupportFragmentManager() If supporting only API level 11 and higher: use getFragmentManager() 參考: API Guides: Action Bar https://developer.android.com/guide/topics/ui/actionbar.html

8.11.2011

[Android] 如何解決「ERROR: the user data image is used by another emulator. aborting」的問題

資料來源:进则净土,退则凡尘

問題概述:
在啟動Android模擬器時出現以下錯誤,導致啟動失敗。
ERROR: the user data image is used by another emulator. aborting。

原因:
系統判斷你當前已經啟動了另外一個emulator,可能是某些正常操作或異常退出造成的。

解決方法:
1. 進入你avd目錄下:
如:C:\Documents and Settings\(User)\.android\avd\android2.3.avd

2. 刪除以lock結尾的資料夾。
(我簡單解釋下為什麼要刪除這些檔呢,其實.lock是加鎖,如果程式崩潰等原因導致無法清除這些以.lock結尾的資料夾,就會出現這個問題,也就是這個avd的鎖沒有被釋放,導致avd manager以為這個avd正在使用當中。)

3. 重新啟動 emulator

6.17.2011

[Android] 使用 GoogleAdMobAdsSdk-4.1.1.jar
在 Android 程式中投放 AdMob 廣告

「AdMob」現在可以推播「AdSense for Mobile Applications」的廣告,貌似Google 想用 AdMob for Mobile Apps 取代 AdSense for Mobile Applications,推播AdMob廣告的程式代碼也有大翻修,這裡來紀錄一下新版 GoogleAdMobAdsSdk-4.1.1.jar or GoogleAdMobAdsSdk-4.1.0.jar 的步驟。

將Google AdMob嵌入Android程式中有三個步驟
1. 將SDK JAR增加到Eclipse專案之中
2. 宣告com.google.ads.AdActivity
3. 設定網路連線許可


  • 新增SDK JAR
    1. 在 Eclipse 專案按下滑鼠右鍵,選擇「Properties」
    寄件者 Blogger


    2. 點選Java Build Path-> Libraries-> Add External JARs...,將你所存的 GoogleAdMobAdsSdk-4.1.0.jar 添加到專案之中
    寄件者 Blogger



  • 宣告com.google.ads.AdActivity
    在AndroidManifest.xml中宣告com.google.ads.AdActivity

    <activity android:name="com.google.ads.AdActivity"
    android:configChanges="keyboard|keyboardHidden|orientation"/>



  • 連線許可
    一樣在AndroidManifest.xml中添加 INTERNET 和ACCESS_NETWORK_STATE的許可

    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />


    <manifest android:versioncode="1" android:versionname="1.0" package="com.company" xmlns:android="http://schemas.android.com/apk/res/android">
      <application android:debuggable="true" android:icon="@drawable/icon" android:label="@string/app_name">
        <activity android:label="@string/app_name" android:name="BannerExample">
          <intent-filter>
            <action android:name="android.intent.action.MAIN">
            <category android:name="android.intent.category.LAUNCHER">
          </category></action></intent-filter>
        </activity>
    
    <!-- 這裡開始 com.google.ads.AdActivity -->
    <activity android:name="com.google.ads.AdActivity"
                  android:configChanges="keyboard|keyboardHidden|orientation"/>
    <!-- 這裡結束 -->
    </application>
    
    
    <!-- 這裡開始 INTERNET 和 ACCESS_NETWORK_STATE -->
      <uses-permission android:name="android.permission.INTERNET"/>
      <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
    <!-- 這裡結束 -->
    
    </manifest>
    
    

    現在,我們可以測試一下囉!發現:有時廣告請求並無法馬上投放,當請求次數多時投放率也會跟著提高喔!

    import com.google.ads.*;
    
    public class BannerExample extends Activity {
      @Override
      public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    
        // Create the adView
        AdView adView = new AdView(this, AdSize.BANNER, MY_AD_UNIT_ID);
        // Lookup your LinearLayout assuming it’s been given
        // the attribute android:id="@+id/mainLayout"
        LinearLayout layout = (LinearLayout)findViewById(R.id.mainLayout);
    
        // Add the adView to it
        layout.addView(adView);
        
        // Initiate a generic request to load it with an ad
        adView.loadAd(new AdRequest());
      }
    }
    

    另外,這種方式只適用於初學者練習,較不利於在UI排版,呼~ 花了兩小時整裡,先休息一下再來出個進階版教學文件。
  • 本益比(P/E) 是股價是否合理的指標?

    本益比 (P/E) = 股價 P ÷ 每股獲利 EPS

    而EPS又可分為過去的每股盈餘(Trailing EPS)及預估每股盈餘(Forecasting EPS)

     以投資的角度來看,股價則是投資1股所需要的成本(購買成本),而每股獲利意思是投資1股所得到的獲利,因此本益比就是投資該股票1股的成本與獲利的比值,即為報酬率的倒數。在合理本益比接近的條件下,較低的本益比通常代表著投資的潛在報酬較大。

     不同產業所享有的本益比不同,具有高成長潛力的公司,其合理的本益比也將較高。例如通訊產業的本益比將高於食品業。而公司未來幾年的年複合成長率可作為合理本益比的參考值。

    UNION 運算子 (SQL UNION Operator)

    UNION 運算子用來將兩個(以上) SQL 查詢的結果合併起來,而由 UNION 查詢中各別 SQL 語句所產生的欄位需要是相同的資料型別及順序。

  • UNION查詢只會返回不同值的資料列,有如SELECT DISTINCT。
  • UNION就是像是OR(聯集),如果紀錄存在於第一個查詢結果集或第二個查詢結果集中,就會被取出。
  • UNION與Join不同的地方在於,Join是作橫向結合(合併多個資料表的各欄位);而UNION則是作垂直結合(合併多個資料表中的紀錄)。

    UNION 語法 (SQL UNION Syntax)

    SELECT column_name(s) FROM table_name1
    UNION
    SELECT column_name(s) FROM table_name2;

    UNION查詢返回的資料集欄位名稱,通常會依據第一個SELECT查詢的欄位名稱。
  • 2.19.2011

    簡單的股票買賣原則

    胡立陽老師於電視上提供的買賣原則

    簡單的買進股票規則:
  • 買會動的股票
  • 10日平均線看漲,且10周平均線也看漲

    簡單的賣出股票規則:
  • 套了5天就不要了
  • 5天內跌4天
  • 連續跌3天

    PS.選股買股都不難,難就難在確實執行自己定的投資原則呀,不然怎麼會住套房還越套越深呢,唉~~~
  • 8.12.2010

    DataTable的Select,Compute用法

    System.Data.DataTable table = new DataTable();


    //計算常量,可以沒有初始化列
    object test = table.Compute("1+1", "");
    Console.WriteLine(test);
    //test=2;

    test = table.Compute("1+1", "false");
    Console.WriteLine(test);
    //test=2;常數計算和filter無關

    test = table.Compute("abs(1)", "");
    Console.WriteLine(test);
    //test=null,不知道為這個什麼沒有抱錯,而且返回null,其他的數學函數都會抱錯

    test = table.Compute("2%2", "");
    Console.WriteLine(test);
    //test=0;
    //其他函數參考下面的計算列


    //初始化datatale
    table.Columns.Add("id", typeof(string));
    table.Columns.Add("value", typeof(int));
    for (int i = 1; i <= 10; i++)
    {
    System.Data.DataRow dRow = table.NewRow();
    dRow["id"] = "id"+i.ToString();
    dRow["value"] = i;
    table.Rows.Add(dRow);
    }



    //test = table.Compute("value+1", "true");
    ////拋出異常,這裡必須是彙總函式


    //*************************************支持的彙總函式**********************//

    //求數量
    test = table.Compute("count(id)", "false");
    Console.WriteLine(test);
    //test=0;

    test = table.Compute("count(id)", "true");
    Console.WriteLine(test);
    //test=10;


    //求和
    test = table.Compute("sum(value)", "");
    Console.WriteLine(test);
    //test=55;

    //test = table.Compute("sum(id)","");
    ////拋出異常,這裡不能是string


    //平均
    test = table.Compute("avg(value)", "");
    Console.WriteLine(test);
    //test=5;


    //最小
    test = table.Compute("min(value)", "");
    Console.WriteLine(test);
    //test=1;

    //最大
    test = table.Compute("max(value)", "");
    Console.WriteLine(test);
    //test=10;

    //統計標準差
    test = table.Compute("StDev(value)", "");
    Console.WriteLine(test);
    //test=3.02765035409749

    //統計方差
    test = table.Compute("Var(value)", "");
    Console.WriteLine(test);
    //test=9.16666666666667


    //複雜計算
    test = table.Compute("max(value)/sum(value)", "");
    Console.WriteLine(test);
    //test=0.181818181818182

    /*******************************************計算列*************************/

    System.Data.DataColumn column = new DataColumn("exp1",typeof(float));
    table.Columns.Add(column);


    //簡單計算
    column.Expression = "value*2";
    test = table.Select("id='id1'")[0]["exp1"];
    Console.WriteLine(test);
    //test=2;

    //字串函數
    column.Expression = "len(id)";
    test = table.Select("id='id1'")[0]["exp1"];
    Console.WriteLine(test);
    //test=3;

    //字串函數
    column.Expression = "len(' '+id+' ')";
    test = table.Select("id='id1'")[0]["exp1"];
    Console.WriteLine(test);
    //test=5;

    //字串函數
    column.Expression = "len(trim(' '+id+' '))";
    test = table.Select("id='id1'")[0]["exp1"];
    Console.WriteLine(test);
    //test=3;

    //字串函數
    column.Expression = "substring(id,3,len(id)-2)";
    test = table.Select("id='id1'")[0]["exp1"];
    Console.WriteLine(test);
    //test=1; //substring的起始字元位置為1不是0

    //類型轉換
    column.Expression = "convert(substring(id,3,len(id)-2),'System.Int32')*1.6";
    test = table.Select("id='id1'")[0]["exp1"];
    Console.WriteLine(test);
    //test=1.6;

    //相當於sqlserver的isnull
    column.Expression = "isnull(value,10)";
    test = table.Select("id='id1'")[0]["exp1"];
    Console.WriteLine(test);
    //test=1;

    //三元運算子,相當於sqlserver的case when
    column.Expression = "iif(value>5,1000,2000)";
    test = table.Select("id='id1'")[0]["exp1"];
    Console.WriteLine(test);
    //test=2000;

    //like運算子
    column.Expression = "iif(id like '%1',1000,2000)";
    test = table.Select("id='id1'")[0]["exp1"];
    Console.WriteLine(test);
    //test=1000;

    //in運算子
    column.Expression = "iif(id not in('id1'),1000,2000)";
    test = table.Select("id='id1'")[0]["exp1"];
    Console.WriteLine(test);
    //test=2000;

    //嵌套的三元運算
    column.Expression = "iif(value>5,1000,iif(id like '%1',4000,2000))";
    test = table.Select("id='id1'")[0]["exp1"];
    Console.WriteLine(test);
    //test=4000;


    //用戶端計算所占總數的百分比
    column.Expression = "value/sum(value)";
    test = table.Select("id='id1'")[0]["exp1"];
    Console.WriteLine(test);
    //test=0.01818182


    //用戶端計算差值,比如nba常規賽的勝場差
    column.Expression = "max(value)-value";
    test = table.Select("id='id1'")[0]["exp1"];
    Console.WrITeLine(test);
    //test=9


    //***********************父子表計算*************************************/


    //初始化子表,父子表關係
    DataTable tableChild = new DataTable();

    tableChild.Columns.Add("id", typeof(string));
    tableChild.Columns.Add("value", typeof(int));

    System.Data.DataSet ds = new DatASEt();
    ds.Tables.Add(tableChild);
    ds.Tables.Add(table);
    DataRelation relation = new DataRelation("relation", table.Columns["id"], tableChild.Columns["id"]);
    ds.Relations.Add(relation);

    for (int i = 1; i <= 10; i++)
    {
    System.Data.DataRow dRow = tableChild.NewRow();
    dRow["id"] = "id1";
    dRow["value"] = i;
    tableChild.Rows.Add(dRow);
    }


    //計算子表記錄數
    column.Expression = "count(child(relation).value)";
    test = table.Select("id='id1'")[0]["exp1"];
    Console.WriteLine(test);
    //test=10;



    //計算父子表的百分比
    column.Expression = "value/sum(child(relation).value)";
    test = table.Select("id='id1'")[0]["exp1"];
    Console.WriteLine(test);
    //test=0.01818182;


    //計算父子表的差值,比如父表為庫存數量,子表為訂購數量,計算得出需要補充的數量
    column.Expression = "iif(value-sum(child(relation).value)>0,0,value-sum(child(relation).value))";
    test = table.Select("id='id1'")[0]["exp1"];
    Console.WriteLine(test);
    //test=-54;