標籤:android 長沙軟體培訓
Android 開發問題集錦
問題一:No marked region found along edge錯誤
答:如果在Android項目中使用Nine Patch資源,時候可能出現比如ERROR: 9-patch image eoeAndroid .9.png malformed.或 No marked region found along edge.以及 Found along top edge.的錯誤主要是因為該圖片沒有四周的定位像素。
問題二:layout_weight的作用是什嗎?
答:很多時候大家可能發現布局xml檔案中有一個layout_weight屬性,不是layout_height也不是layout_width,那麼 layout_weight是什麼呢? 它的定義是一個比重。比如在一個LinearLayout中,有三個TextView控制項,如果第一個設定layout_height為1,第二個為1,最後一個為2,這時候這三個TextView控制項的大小為 1:1:2 。在Android開發中我們可能經常用到這個屬性來排列一些控制項。
問題三:Android Zip解壓縮類處理中文名亂碼
答:目前Android平台上的底層庫仍然有很多不完善的地方比如zlib庫處理Zip檔案時無法對中文檔案名稱做正確的處理,同時無法類似J2SE那樣 的android.util.zip類沒有setEncoding方法處理。目前解決方案是引入apache的ant庫來實現解壓縮,同時apache ant庫好包含了完整的xml dom4j解析庫可以實現document的儲存。
當然引入apache ant庫的問題是造成程式編譯後體積變得臃腫,演算法因為是java寫的效率上會大打折扣,但是解決下問題還是可以的,重量級處理還是放到伺服器上比較好。
目前總體來看Android平台底層庫很多地方做的不近人如意,很多關鍵地方都出現了問題。
問題四:layout_toRight錯誤解決方案
答:有朋友詢問在匯入一些老版本的Android項目時出現了layout_toRight 的錯誤提示,具體的如No resource identifier found for attribute ‘layout_toRight‘ in package ‘android‘,其實在Android 1.1開始SDK做了小幅的改變,比如android:id均換為android:name,這裡layout_toRight換成 layout_toRightOf即可。有些情況ADT還可能協助我們修正問題,Tony提示直接在錯誤的地方單擊滑鼠右鍵,選擇Quick Fix不妨看看。
問題五:Android方法中的synchronized是什麼意思?
答: 很多朋友可能看到部分Android方法中出現了synchronized字樣,比如public static synchronized String getHttpResponse(String url) ,其實這個問題屬於Java基礎和Android無關,使用關鍵字 synchronized 字面表示同步,而實際中在多線程程式裡
為了防止結果出現意外(會出什麼意外呢?Tony舉例比如一個線程正在寫檔案,還沒有寫完,但是另一個線程就開始讀取了),加入synchronized可以為該方法上鎖,即只有一個線程單獨訪問該方法,類似Win32中的臨界區Critical Section是一個道理。不過要提示大家該方法不要濫用,線上程安全的場合下使用會增加系統開銷影響效能。而有些時候還會在方法中出現 synchronized(this) 字樣,不錯 synchronized(this) 一般用於鎖住某個迴圈中的內容,在iPhone Cocoa中也同樣適用。
問題六:ListView在ScrollView中無法正常顯示
答:對於ListView放在在ScrollView中時,目前Android平台仍然有些bug,狀態是顯示的ListView僅僅大約一行半(總Item 肯定大於2行,比如10行),通過Layout布局屬性設定目前仍然無法修正。通過分析ListView和ScrollView構造沒有發現很好的解決方案,目前可以通過自己實現ListView來解決,Tony解決的方式是重寫ListView的onMeasure重新計算顯示行數。希望在 Android以後的版本,至少2.1以後能夠改進。
問題七:The content of the adapter has changed解決方案
答:很多新手在Android開發時可能對Thread和Message以及Handler、Looper概念不是很清楚,可能產生類似 The content of the adapter has changed but ListView did not receive a notification make sure the content of your adapter is not modified from a background thread . but only from the UI thread.的錯誤。來自郵箱中這個問題,解決方案必須要詳細的代碼,不過給出以下幾點可以協助你瞭解該問題:
1.嘗試Adapter的notifyDataSetChanged()方法,當然主要看你代碼的具體情況。
2.改變適配器Adapter內容時不要在後台線程中,必須在UI線程中處理,這點可以通過Handler傳出來解決。
問題八:Adapter中notifyDataSetChanged的作用
答:對於Android開發來說處理一些介面需要和Adapter適配器打交道,雖然Android內建了一些比如ArrayAdapter但是大多數情況下無法滿足我們需要,所以就要從BaseAdapter派生一個類滿足我們特殊的需要。
首先我們可能重寫getView(),通過LayoutInflater的inflate方法映射一個自己定義的Layout布局xml載入或從xxxView中建立。這些大家可能滾瓜爛熟了但是仍然很多Android開發人員對於BaseAdapter中notifyDataSetChanged()方法不是很理解,notifyDataSetChanged方法通過一個外部的方法控制如果適配器的內容改變時需要強制調用getView來重新整理每個Item的內容。
問題九:Resource is out of sync with錯誤
答:很多網友抱怨Android的Eclipse很差勁,經常出現一堆莫名其妙的錯誤,Resource is out of sync with the file system錯誤如何解決呢? 這主要是由於資源檔被Eclipse之外的編輯器開啟了,為了保證剛才儲存的東西不受衝突,IDE自己保護了,解決的方法最笨的就是關掉Eclipse 再開,提示資源儲存時單擊No,或者直接按F5鍵,如果程式時自動編譯的清空下項目會重建。的確從多年前的Symbian時代開始Carbide C++(基於Eclipse)就從來沒有給開發人員帶來過效率,相比開發iPhone的xCode或者Windows Mobile的Visual Studio來說Eclipse這個Java開發的東西實在不敢恭維啊,假死和糟糕的使用者體驗實在讓人難忘。
文章整理自長沙軟體培訓http://www.cshope.net/
本文出自 “皇額娘的部落格” 部落格,請務必保留此出處http://8878509.blog.51cto.com/8868509/1408402