2019/11/20

Android Studio 忘了 keystroke password怎麼找回?

現在年紀越來越大,記性越來越差,加上密碼越來越多,沒記下來很快就會忘記,今天我就忘了我的APP打包上架密碼,還好上網Google一下,加上我原先有備份整份專案,果然幸運找回遺忘的密碼(在試了數十個密碼之後,在備份下來的專案中找到的

方法大致如下:
從你的專案中的.gradle中去找叫 executionHistory.bin 或 taskHistory.bin 或 taskArtifacts.bin這種檔案。然後搜尋其中的關鍵字 storePassword ,在這個關鍵字後面會看到遺失的密碼。

我是在 ...<專案目錄>\.gradle\5.4.1\executionHistory\executionHistory.bin 這個檔案中找到的。不過是在備份的專案目錄中找到的,因為目前專案中的這個檔案記錄的是最近三次錯誤的密碼。

現在我已經找個地方記下我的密碼了,備份果然是一件很重要的事!


2019/10/14

Android App學習筆記(二) 在Empty Activity中新增ToolBar

我新增了一個Empty Activity(名稱就叫DBlist), 我想增加Toolbar, 該如何操作呢?

--------------------------------------
首先, 我在這個 Activity的Layout上(檔名假設為: activity_dblist.xml)加入了ToolBar, 如下:
<com.google.android.material.appbar.AppBarLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:theme="@style/AppTheme.AppBarOverlay">
    <androidx.appcompat.widget.Toolbar
        android:id="@+id/dbListToolbar"
       android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize"
        android:background="?attr/colorPrimary"
        app:contentInsetStart="1dp" 
       app:popupTheme="@style/AppTheme.PopupOverlay" />
</com.google.android.material.appbar.AppBarLayout>

同時在onCreate()中要增加這兩行, 才會出現新增的Toolbar
Toolbar toolbar = findViewById(R.id.dbListToolbar);
setSupportActionBar(toolbar);
--------------------------------------
但是這樣會出現兩個Toolbar(可能一個叫ToolBar, 一個叫APPbar?), 所以必需在 AndroidManifest.xml中修改這個Activity的屬性, 增加 android:theme="@style/AppTheme.NoActionBar" , 如下:
<activity    android:name=".DBList"    android:theme="@style/AppTheme.NoActionBar" />

--------------------------------------
接著,  我想要在ToolBar 上增加返回的箭頭, 就必需在onCreate()中再增加這兩行
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setHomeButtonEnabled(true);

可是我按下返回箭號, 卻沒有任何反應, 原來我必需要在onOptionsItemSelected(MenuItem item)中再加入
if  (item.getItemId()==android.R.id.home) return;
--------------------------------------
然後, 我想修改Toolbar 的Title ,不想出現app名稱, 例如想改為"資料庫", 則在 onCreate() 中要增加這一行
getSupportActionBar().setTitle("資料");
--------------------------------------
再來, 我還想增加一些menu 選項, 那麼我還要做以下的幾件事
1. 在menu中新增一個xml (例如叫: menu_dblist.xml)
2. 覆寫onCreateOptionsMenu(), 讓optionMenu出現在Toolbar上
@Overridepublic boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.menu_dblist, menu);
    return true;
}
--------------------------------------

說了那麼多, 總結一下全部的步驟:
1. 修改AndroidManifest.xml :  
   在該activity (名稱假設為: DBList) 增加一個theme屬性, 指定為 "@style/AppTheme.NoActionBar" 

   <activity    android:name=".DBList"    android:theme="@style/AppTheme.NoActionBar" />

2.在這個 Activity的Layout上加入了ToolBar元件(id假設為dbListToolbar):
<com.google.android.material.appbar.AppBarLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:theme="@style/AppTheme.AppBarOverlay">
    <androidx.appcompat.widget.Toolbar
        android:id="@+id/dbListToolbar"
       android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize"
        android:background="?attr/colorPrimary"
        app:contentInsetStart="1dp" 
       app:popupTheme="@style/AppTheme.PopupOverlay" />
</com.google.android.material.appbar.AppBarLayout>
3.在這個Activity的onCreate()中增加以下程式:
Toolbar toolbar = findViewById(R.id.dbListToolbar);
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setHomeButtonEnabled(true);
getSupportActionBar().setTitle("資料");

4.在這個Activity的onOptionsItemSelected(MenuItem item)中再加入
if  (item.getItemId()==android.R.id.home) return;
--------------------------------------



2019/10/03

Android App學習筆記(一) Toolbar style的一些設定


修改 activity_main.xml中有關Toolbar的設定
  1. 要顯示logo : 增加app:logo屬性
    app:logo="@mipmap/ic_launcher"
  2. 要讓 logo與左邊界距離近一些,增加app:contentInsetStart屬性
    app:contentInsetStart="5dp"
修改後的Toolbar如下:
        <androidx.appcompat.widget.Toolbar
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"
            android:background="?attr/colorPrimary"
            app:contentInsetStart="5dp"
            app:logo="@mipmap/ic_launcher"
            app:popupTheme="@style/AppTheme.PopupOverlay" />

2019/07/05

EXCEL如何將字串進行樞紐分析-利用CONCATENATE與VLOOKUP函數

最近在整理同仁的ERP權限, 我想將下圖中左邊的表變成右邊的表








第一個念頭就是用EXCEL的樞紐分析來完成, 沒想到竟然GG了, 結果如下圖











後來靈光一閃, 或許可以用VLOOKUP() 和 CONCATENATE() 兩個函數完成, 由於要讓VLOOKUP找到D欄的值, 必需要靠B和C兩個欄位, 因此我在A欄使用CONCATENATE函數將B和C兩欄串接在一起, 如下圖,以A2格為例,公式為
 =CONCATENATE(B2,".",C2) 
















接著我還是利用剛才GG的樞紐分析結果, 將"欄標題" 與"列標題" 複製成為右邊表格的"欄標題" 與"列標題"







然後在G2輸入 VLOOKUP和CONCATENATE組合而成的公式,
=VLOOKUP(CONCATENATE(G$1,".",$F2),$A:$D,4,FALSE)
因為待會要將這個公式複製到其它儲存格, 所以我加上了絕對位址的$符號
接著再把G2的公式複製到其它儲存格, 就得到下圖的結果






由於出現了 #N/A這個錯誤的訊息,不夠完美,只好再利用ISNA()IF()兩個函數來美化,以G2儲存格為例,公式變成如下(如果G2結果變成#N/A, 那麼請留白的意思):
=IF(ISNA(VLOOKUP(CONCATENATE(G$1,".",$F2),$A:$D,4,FALSE)),"",VLOOKUP(CONCATENATE(G$1,".",$F2),$A:$D,4,FALSE))
接著同樣把G2的公式複製到其它儲存格, 就得到下圖的完美結果







這次一共用到CONCATENATE()VLOOKUP()ISNA()IF() 四個函數,算是EXCEL中蠻常用到的函數,若有興趣,不妨花點時間瞭解如何使用他們。





2019/05/22

SQL的累加範例

我想要用SQL來計算每一個產品各階製程的完工率,假設是以各製程的標準工時為依據,因此我需要統計每個製程的累計時數與每個產品的總工時。

例如:產品A共有三個製程,其標準工時依序為20、30、50, 則其總工時為100 (20+30+50), 各階累計標工時為: 第一製程20, 第二製程50 (20+30), 第三製程為 100 (20+30+50), 如下表:


雖然Oracle和MS-SQL或許各自有提供函數來節省SQL語句,但為求跨平台,我必需用標準的SQL語法來完成,經過一番思考,完成了這組SQL, 經過驗證,可以在這兩套資料庫(Oracle、MS-SQL)使用,我相信其它的資料庫也可以使用。

我在這兩套資料庫中各自建立了一個資料表(TABLE), 姑且命名為pt, 這個資料表只有三個欄位(column, field):pno (產品)、seq(製程)、time(標準工時)

SQL如下:

SELECT H.pno 產品,H.seq 製程序
      ,SUM(CASE WHEN D.pno=H.pno AND D.seq =H.seq THEN D.time ELSE 0 END) 本階工時
      ,SUM(CASE WHEN D.pno=H.pno AND D.seq<=H.seq THEN D.time ELSE 0 END) 累計工時
      ,SUM(CASE WHEN D.pno=H.pno                  THEN D.time ELSE 0 END) 總工時
      ,(SUM(CASE WHEN D.pno=H.pno AND D.seq<=H.seq THEN D.time ELSE 0 END) / SUM(CASE WHEN D.pno=H.pno THEN D.time ELSE 0 END)) 完工率
  FROM pt H, pt D
 WHERE H.pno=D.pno 
 GROUP BY H.pno, H.seq
 ORDER BY H.pno, H.seq

所查詢出來的結果:


精選

小百岳35天完登計劃

台灣小百岳大多屬於容易親近的郊山,可一日往返,適合親子同遊,以下就個人完登的經驗整理一份35天完百規劃(來回步行大約400公里、費時200小時),提供給有意完百的山友參考,這是我們這對菜鳥肉腳夫妻的實測記錄,大多數人可以在更快的時間內完成。山林的奧勝美妙值得我們慢步欣賞、駐足享...