常見異常備忘錄

2021-06-29 04:23:50 字數 1194 閱讀 5798

異常:

1. new file(string path)

這個path不能為空,否則空指標

2. listview資料更新導致的陣列越界異常arrayoutofbound

listview通常會對應乙個資料集,一般用list儲存。

listview重新整理時,首先呼叫adapter的getcount(), getcount通常返回資料集中資料的個數。

假設getcount()返回n,

則接著呼叫 n 次 adapter的getview()方法。

而getview通常會訪問資料集指定位置的資料。

當資料集不變時,沒有問題。

一旦資料集發生變化,確切的說,資料減少時,

例如減少1個,那麼訪問資料集list第n-1位置是,就發生資料越界。

發生異常的場景:

支援刪除資料的listview。

解決方案:

1. getview中訪問資料前,檢查是否陣列越界。

或者2. 刪除資料時,確保介面沒有同時重新整理。這個在介面設計上有點複雜。

3. 遍歷集合同時修改集合導致的concurrentmodificationexception

錯誤的**如下,以map為例。這裡remove或者put都會導致該異常。

比較坑的是,三星手機會出現該異常,但是會被系統吃掉,**直接終止,應用程序不會終止,介面不會有任何提示。

小公尺等不會報該異常,一切正常。

正確的**如下:

非異常

1. dialog建構函式的cancellistener的***可以為null。

預設行為就是dismiss。

這個沒有官方檔案規定,

通過看源**發現,並已實踐驗證。

風險:後續版本的android原始碼會不會crash,無法保證。

備忘錄模式

備忘錄模式 memento 在不破壞封裝性的前提下,捕獲乙個物件的內部狀態,並在該物件之外儲存這個狀態。這樣以後就可將該物件恢復到原先儲存的狀態。originator 發起人 負責建立乙個備忘錄memento,用以記錄當前時刻它的內部狀態,並可以使用備忘錄恢復內部狀態。originator可根據需要...

備忘錄模式

先從物件導向的三大特徵之一封裝說起。物件導向的封裝簡單點說就是把狀態 資料 和行為 操作這些資料的方法 放到一起,構成乙個單元,通常叫做類。乙個物件的行為是事先確定好的 靜態 一些指令碼,如果物件的狀態相同,物件看起來就是一樣的。所以當我們需要把乙個物件的某一時刻儲存起來,那麼只需要儲存它在那個時刻...

備忘錄模式

面臨問題 物件狀態的變化無端,如何回溯恢復物件在某個點的狀態?在軟體構建過程中,某些物件的狀態在轉換過程中,可能由於某種需要,要求程式能夠回溯到物件之前處於某個點時的狀態。如果使用一些公用介面來讓其他物件得到物件的狀態,便會暴露物件的細節實現。如何實現物件狀態的良好儲存與恢復?但同時又不會因此而破壞...