【Kotlin-Java】異常處理,synchronized
阿新 • • 發佈:2021-01-30
技術標籤:Kotlin-Java
扉
一:個人經驗
相比於java的程式碼,個人更喜歡Kotlin的簡潔程式碼。
1. 異常處理
- 初學小白的情況下,對異常根本沒有處理的能力,基本上只是丟擲異常,然後執行 finally。但由於CE的嚴格機制,導致很多地方不得不寫這種丟擲型異常,為了編譯器。對程式設計大佬可能更友好,更安全。
- Kotlin的異常是可選擇的,你可以選擇在必要的地方處理異常。
2. Kotlin減少異常做了什麼
- 為防止最常見的空指標異常,其定義了變數宣告必要初始化,如果你願意接受空指標的情況,也可宣告為可空型別
- 一個類預設不可被繼承,想被繼承得開放類 open
3. 樣例
- 該demo為Kotlin對資料庫的操作
- mLock 是一個物件,在synchronized中鎖住實現資料庫的互斥訪問
- 事務:
1)開啟事務。
2)執行endTransaction() 方法時會檢查事務是否為成功
3)程式執行到endTransaction()之前呼叫了setTransactionSuccessful() 方法設定事務的標誌為成功則提交事務,如果沒有呼叫則回滾事務。 - 注意finally中的處理
public void addHistory(AudioBean itembean) {
synchronized(mLock) {
SQLiteDatabase db = null;
boolean isSuccess = false;
try {
db = mDbHelper.getWritableDatabase();
//先去刪除 解決重複問題
int deleteresult=db.delete(Constants.HISTORY_TB_NAME,Constants.HISTORY_TITLE + "=?",new String[]{itembean.getTitle() + "" });
/* System.out.println("1111111111"+deleteresult);*/
//刪除以後再新增
//1.手動設定開始事務
db.beginTransaction();
ContentValues values = new ContentValues();
//封裝資料
values.put(Constants.HISTORY_Album_ID,itembean.getAlbumid());
values.put(Constants.HISTORY_TITLE,itembean.getTitle());
values.put(Constants.HISTORY_ARTIST,itembean.getArtist());
values.put(Constants.HISTORY_DURATION,itembean.getDuration());
values.put(Constants.HISTORY_Size,itembean.getSize());
values.put(Constants.HISTORY_Album,itembean.getAlbum());
values.put(Constants.HISTORY_DATA,itembean.getData());
//插入資料
db.insert(Constants.HISTORY_TB_NAME,null,values);
//2.資料操作完成
db.setTransactionSuccessful();
isSuccess = true;
} catch(Exception e) {
isSuccess = false;
e.printStackTrace();//日誌輸出
} finally {
if(db != null) {
//3. 處理完成 檢查並提交事務
db.endTransaction();
db.close();
}
if(mCallback != null) {
mCallback.onHistoryAdd(isSuccess);
}
}
}
}