Android開發關於AlertDialog兩三事

開發android都知道,要顯示視窗訊息,不是那直覺方便的,需要搭配Handler參與才能走得順。

# 原本以為myAlterDialog.show()後,就可以馬上執行其他程式商業邏輯,完成後停掉myAlterDialog即可
# (例如我們要實現APP「顯示"請稍後",然後背景執行其他程式商業邏輯,執行完取消"請稍後"」)
# 但我沒想到程式商業邏輯需要寫在Handler裡面才不會讓卡住。

public class MainActivity extends AppCompatActivity {
  AlertDialog.Builder waitBuilder = null;
  AlertDialog waitDialog;
  ...
  protected void onCreate(Bundle savedInstanceState) {
     ...
     waitBuilder = new AlertDialog.Builder(activity);
     waitBuilder.setCancelable(false);
     waitBuilder.setView(R.layout.loading_dialog);
     myAlterDialog = waitBuilder.create();
  }

  public void onStart() {

    adapter.setOnItemLongClickListener(.....){
      ...
      runOnUiThread(new Runnable() {
        @Override
	public void run() {
          myAlterDialog.show();
	  new Handler(Looper.getMainLooper()).postDelayed(new Runnable() {
	    @Override
 	    public void run() {
              runOnUiThread(new Runnable() {
                @Override
                public void run() {
                  ...
                  Toast.makeText(activity,"success"....
                  myAlterDialog.dismiss();
                }
              });
	    }
	  }, 300);	
        }
      }
      ...
     });		
   });
}

麻瓜勿擾,GIT文字筆記

2011年第一隻android app有數萬下載量,到2019年我又練習寫了一個「GIT文字筆記」,是個「麻瓜勿擾的APP」。
該APP有開源,久了我也幾乎忘了有這,最近收到app要改目標版本,否則要下架,於是我更新時,再加碼限制android 13或以上才能安裝使用;
果然幾乎沒人用,到目前只有50+下載 XD

我這APP也很奇葩,用git shallow減少clone下載版本量呢。

https://play.google.com/store/apps/details?id=inmethod.gitnotetaking

java jdbc 連到 M$ access “ucanaccess”

年紀一大把了,還在搞Acess,慘

你可以存取的(u can access),到此下載

解開後,除了本體ucanaccess-xxx.jar外,在lib目錄下的jar檔也需要。

其中存取access的關鍵jackcess-xxx.jar (目前最新版4.0.6),可另外下載取代ucanaccess內建的3.0.1版本

JDBC Connection String

jdbc:ucanaccess://c:/xxx.mdb;memory=false

「FydeOS – 为中国用户打造的ChromeOS」初體驗

公司希望Android撰寫的測試程式移植到windows平台上,但是這樣做很耗時,程式要重新開發; 因此我想到讓筆電或電腦桌機能夠直接執行android, 這樣就能解決問題了。

我排除已知的解決方案之一-Android模擬器、windows 11模擬andorid不考慮(因為要停用了)。

最後我希望類似chrome book 使用chrome OS直接支援android 的方式,沒想到還真的找到了 –FydeOS

安裝FydeOS有些眉角要注意的:

  1. 筆電-panasonic CF-NX3,12G Ram
  2. 官方安裝方式,我要連續安裝好幾次才成功
  3. 安裝時,我的舊電腦BIOS先調整非UEFI才能安裝,安裝後再調回UEFI,才能啟用開發者模式(v18版)
  4. 安裝時,我使用本機帳號,不線上註冊
  5. 安裝完畢,FydeOS系統成功開機,啟用Android位置權限失敗,後來發現安裝Open GApps,GApps會將Play商店裝起來,才能啟用位置權限
  6. Play商店無法登入(未通過Play防護安全認證)
  7. 其他方面很順,簡直就是chrome book

java Servlet 取得遠端ip

原來不是這麼簡單

private static final String[] VALID_IP_HEADER_CANDIDATES = { 
  "X-Forwarded-For",
  "Proxy-Client-IP",
  "WL-Proxy-Client-IP",
  "HTTP_X_FORWARDED_FOR",
  "HTTP_X_FORWARDED",
  "HTTP_X_CLUSTER_CLIENT_IP",
  "HTTP_CLIENT_IP",
  "HTTP_FORWARDED_FOR",
  "HTTP_FORWARDED",
  "HTTP_VIA",
  "REMOTE_ADDR" 
};

public static String getClientIpAddress(HttpServletRequest request) {
  for (String header : VALID_IP_HEADER_CANDIDATES) {
    String ipAddress = request.getHeader(header);
    if (ipAddress != null && ipAddress.length() != 0 && !"unknown".equalsIgnoreCase(ipAddress)) {
      return ipAddress;
    }
  }
  return request.getRemoteAddr();
}

bare是啥碗糕? git clone vs gi clone –bare

我們從github拉乾貨下來的時候,一般只有兩種方式,一種是直接下載zip檔案,另一種是克隆;這兩種方式差在克隆可以全部版都(甚至連分支branch)都有,而下載只有最新版的檔案,不含其他版本。

這裡介紹第三種方式,克隆指令加上–bare

git clone --bare <git http url>

會出現原始版本紀錄,但不會出現檔案.

 

未加–bare

我因為系統設計需要寫程式,只需抓出專案標籤名稱以及該標籤所屬的所有檔案名稱,但不需要使用實際檔案;考慮jgit函式庫還是需要克隆下來才能做事情,但我又不需要把真的檔案都拉下來,因此選擇–bare的方式拉貨,就能達到我的目標了。

Eclipse 搭配java 11出現ResolutionException

好久沒寫java程式了,最近要寫「機構3D圖git版控」之後整合程式,編譯沒問題,在eclipse執行時居然出現這個錯誤

Error occurred during initialization of boot layer
java.lang.module.ResolutionException: Modules xxx and yyy export package zzz to module kkk.web

原來是有些jar檔案,並不是使用module方式,但是設定卻在module裡面,只要將該jar檔案從「Modulepath」移到「Classpath」就好了。

java 11 不支援java web start

公司電子表單為鼎新的easyflow GP版, 需安裝支援java web start版本的java, 但我寫程式, 電腦只安裝java11, 不支援java web start怎辦? 我們可以下載IcedTea-Web , 安裝後就可以屎用了.

javaws xxx.jnlp

若出現unsigned jar 問題, 可以找到jdk或是jre , 修改conf\security\java.security這個檔案(安全風險請自行評估), 跳過安全驗證.

jdk.jar.disabledAlgorithms=MD2, RSA keySize < 1024, DSA keySize < 1024

SmartGit令人驚豔的LFS鎖定功能

我用過幾種GIT客戶端程式, 從tortoiseGit, GitEye, gitkraken,SourceTree,GitHub Desktop, 都長期用過, 但老實說我只用基本功能,因此看不出來差異在哪, 也不在意哪種用戶端程式好或不好.

直到最近,公司有個需求,要版控”機構部門的圖檔”,這原本是PLM宏大系統的功能(整合ERP,文件管制), 但…廠商報價後,就GG了.

於是我想自己找解決方案, 能滿足版控, 又要能滿足檔案鎖定功能, 也參考過網路力推,能管控圖檔的 https://www.perforce.com,

perforce 能版控,也能鎖檔案, 甚至細心列出git,svn,與自身產品的差異(當然是老王賣瓜了)
https://www.perforce.com/blog/vcs/git-vs-svn-what-difference
如果有預算, 我也建議圖檔管控應當要用perforce.

但我個人還是想要用git這個比較熟悉,簡單,無複雜系統的工具.
那問題來了,雖說git的LFS可以進行大檔案版本控管與鎖定,但客戶端工具程式還沒找到好用上手的,

直到SmartGit(20.1版以上)現世,這工具能針對檔案進行直覺的”鎖定”, 就好像用檔案總管一樣,能讓麻瓜容易上手.
雖說tortoiseGit也可以在客戶端就鎖定檔案,但整合度實在差太多了, 很不推薦.

Git檔案被william鎖定了

不囉唆,寫心得

  • 確認Git伺服器是否援Git LFS 2.0
    我使用的gitblit 1.9.3 雖然支援LFS,但不是LFS 2.0就無法鎖定檔案,
    慘阿,只好先用吉茶測試
  • 建立/克隆專案Repository,並且確認那些要進行LFS管控
#執行cmd, 到專案Repository目錄執行
git lfs install
git lfs locks --local
git lfs locks --verify
## 設定那些檔案需要進行LFS管控
git lfs track *.exe --lockable
git lfs track *.zip --lockable
...
若執行 git lfs locks –verify 出現錯誤, 有可能是Git伺服器不支援LFS鎖定功能
  • 修改專案Repository設定
#修改.git\config 以下設定若沒有就自行新增
[lfs "https://server/repo.git/info/lfs"]
    ...
    locksVerify = true
#"https://server/repo.git/info/lfs" 為 remote URL,加上/info/lfs
  • 啟用LFS檔案鎖定功能,與背景自動更新LFS最新狀態
SmartGit->Edit->Preference->Low-level Properties
設定 
status.lfs.locks=true
status.lfs.locks=true
background.fetch.delay=30
background.periodicalRefresh.delay=30
backgroundTasks.idleDelay=30
SmartGit->Edit->Preference->Backgroup Command->detect remote changes
設定
當專案Repository沒使用的時候, 或是已設定我的最愛的專案Repository 需要定期檢查LFS狀態

#若沒有設定,則不會自動更新狀態, 會無法得知其他人是否鎖定檔案

**SmartGit 一套單機版最便宜約100美金左右

結論,這樣的設定很複雜,目前還不好用,若能安裝時就一件設定,那就很好了

1 2 3 ... 5