短信讀取軟件的開發階段總結(二)

04-12-13 17:52
 那個短信讀取的軟件終於能夠正常運行了,me也把那個備份文件的短信存儲格式機制摸的七七八八了。但是看着那個可以完成讀取短信任務的程序,越看越不舒服,好亂,什麼東東都糾纏在一起,主程序文件有600多行。這也可以看出me完全沒有軟件設計的功底(汗^_^),完全跟着感覺走,哪裏有問題測試哪裏,想起來差什麼就補充什麼,咿,真亂!


 結合閱讀Thinking in Java從大師那裏帶來的一點點感覺,java的強大源於面向對象,而me卻僅僅把它作爲編碼的工具,太遺憾了。於是決定重構程序,按照面向對象的思路來重新設計。沒有那麼高超的設計能力,me只好實事求是,把短信作一個類,備份文件作一個類,運行的主程序,還有格式化日誌顯示的輔助類。短信的成員很好設定,就是時間、內容、聯繫人等,方法的話設計了判斷緩衝區是否短信內容以及至關重要的讀取合格緩衝區設定成員值。備份文件類則是輸入文件判斷是否合格的備份文件,成員有短信集合以及內部變量如文件指針等等。雖然不是很高明,咋說me這也是面向對象了。於是開始轉移經過日日夜夜無數次測試驗證運行正確的備份文件、短信格式邏輯。一番拷貝、粘貼,霍霍,搞定了。編譯,打包,運行。暈,出了一堆錯誤提示,找到的短信數目也遠遠低於實際數量!


 定了定神,出錯中好像有HashSet的語句,可見是添加Sms到短信集合時出的問題。再詳細查閱出錯的提示,錯誤最裏層是SmsElement類中被重載的hashCode方法。出錯軌跡大約是這樣的:向HashSet添加SmsElement時進行了對比(此Set不允許重複元素存在,因此添加新的時候要進行比較以確定是否已經存在了),然後調用了SmsElement中的equals,牽扯出了hashCode。查閱源碼,一下子還發現不了問題所在。原來那個一體的程序中,因爲所有的功能都集中在一個代碼文件中完成了,設置調試信息的時候非常方便,比如文件讀到哪個地方出了問題一下子就可以顯示出來,但是拆分爲幾個類之後就比較麻煩了,因此me不可能把文件指針傳遞入子類,如果每次都顯示地址的話又太麻煩,誰知道啥時候出錯呢?!抱怨歸抱怨,調試還得進行。運行了幾次後,慢慢感覺到問題應該出在短信構造不充分上面,也就是說短信的成員member還沒有全部設置好就被添加入Set,進行比較時要生成HashCode,對null運算時出錯。拿來測試,呵呵,真是這樣。


 那有是爲什麼短信沒有充分設置好呢?肯定是讀取過程出了問題。有針對性的設置了調試語句,呵呵,抓住了,問題原來出在對佔用多個塊的短信讀取是出錯。查閱了短信收發標識,錯的非常離譜,完全不是me用Hex方式查閱備份文件時會正常出現的標識。再看,原來是錯位了,每次讀取的竟然是多塊中的最後一塊。又是無數次的核對,測試,終於發現了問題所在:me把塊的指針傳入讀取多頁的方法中,竟然不能正確傳回原始指針!沒有辦法,現在不能再考慮模塊之間的獨立性,設置一全局變量做指向塊,ok,問題解決了。


 卡在這裏害me熬夜,真是不甘心啊。索性看看到底卡在哪裏了。在網上用google搜“java 參數傳遞”找到了不少文章。學習後才領會到java中所有參數傳遞都是按值傳遞的。文章隨後貼上。基本概念理解的不夠透徹呀。繼續努力!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章