天天看點

android 開發中遇到的錯誤及解決方式(更新R.java檔案不能自動更新問題)

1、當import一個新的android項目時,項目名稱上出現一個紅色的感歎号,程式不能運作。

原因:工程中classpath中指向的包路徑錯誤。

解決方法:在項目名稱上點右鍵選擇Properties,然後選擇Java Bulid Path中的libraries選項,其中出現紅色x号的路徑為錯誤路徑,删除之後,通過Add External Jars添加正确路徑,點選确定之後,在Package Explorer中重新整理一下。

2、當點選Eclipse中的Properties中的Android選項時,出現“the currently displayed page contains invalid values”。

原因:項目丢失了default.properties檔案所緻。

解決方法:從其他項目中重新拷貝一個default.properties檔案,并修改檔案中的target值。或者,将項目根目錄下的project.properties改名為default.properties。

3、引入一個新的項目後,丢失android.jar檔案。

解決方法:在項目名稱上點右鍵,選擇Properties,再選擇Android,再在其中選擇一個project build target,點确定之後,如還有問題,嘗試在項目名稱上點右鍵,然後選擇Android Tools,再點 Fix Project properties。

4、出現leak window錯誤。

原因:Android的每一個Activity都有個WindowManager窗體管理器,同樣,建構在某個Activity之上的對話框、PopupWindow也有相應的WindowManager窗體管理器。因為對話框、PopupWindown不能脫離Activity而單獨存在着,是以當某個Dialog或者某個PopupWindow正在顯示的時候我們去finish()了承載該Dialog(或PopupWindow)的Activity時,就會抛Window Leaked異常了,因為這個Dialog(或PopupWindow)的WindowManager已經沒有誰可以附屬了,是以它的窗體管理器已經洩漏了。

解決方法:關閉(finish)某個Activity前,要確定附屬在上面的Dialog或PopupWindow已經關閉(dismiss)了。

@Override 
      public void onPause(){
         super.onPause();
         if(pw != null) {
              pw.dismiss(); 
         }
      }       

參考:

http://blog.csdn.net/andy_android/article/details/7304761

5、Eclipse中顯示行号

在代碼編寫區的靠近左側邊框處,點右鍵選擇Show Line Numbers,即可顯示行号。

6、在使用ImageView的setImageResource(int res id)方法時遇到一個java.lang.OutOfMemoryError:bitmap size exceeds VM budget錯誤。

原因:圖檔占用的記憶體超出了系統配置設定的最大記憶體限制,導緻記憶體溢出。

解決方法:使用BitmapFactory的帶有Options參數的方法解析圖檔資源,具體如代碼:

BitmapFactoty.options opts = new BitmapFactory.Options();
opts.inSampleSize = 4;
Bitmap bitmap = BitmapFactory.decodeResource(Resources res, int 		id,opts);      

當然當bitmap不用的時候,應該強制回收一下,具體如下:

if(bitmap != null && !bitmap.isRecycled()){
bitmap.recycle();
}      
另外應注意代碼的優化,比如不要重複初始化變量,盡量使用局部變量,盡量使用static、final、private等關鍵字等等。
      

3月10日更新

7、java.lang.IllegalStateException: The specified child already has a parent You must call removeView() on the child's parent first這個三言兩語解釋不清楚,看我博文:

http://blog.csdn.net/yaolingrui/article/details/7339913

8、在64位ubuntu配置android開發環境時(其實這種情況在64的linux上經常出現)驚現:“Failed to create the SD card.”和“Failed to create sdcard in the AVD folder.”

這種情況如果在64位機上出現時,可能就是因為你沒有安裝支援32位軟體的ia32-libs。遇到這種情況時,

可以在指令行輸入:$sudo apt-get install ia32-libs。

具體可參考:

http://stackoverflow.com/questions/3878445/ubuntu-error-failed-to-create-the-sd-card

04.20更新

9.一般在Android工程下的R.java檔案是自動生成的,即使你手動删除了,如果你選擇了Project->Build Automatically之後,也會自動生成。但有時卻發現新的資源檔案在R.java檔案中不能生成相應的id,并且這時如果将該R.java檔案删除了的話,也不會自動生成,即使build也不行。這時的問題很可能就是因為你的資源檔案有問題造成的,比如布局檔案寫的格式不規範,或者命名時有大寫字母等等。

04.21更新

Calling startActivity() from outside of an Activity  context requires the FLAG_ACTIVITY_NEW_TASK flag

意思是說在Activity的上下文環境之外啟動新的Activity,這時需要設定新Activity的啟動模式為FLAG_ACTIVITY_NEW_TASK,task相當于Activity的容器,目前Activity位于task的最上端,可以讓很多Activity位于一個task,也可以讓不同的Activity位于不同的Task。

做法

Intent intent =  new Intent(getApplicationContext, Xxxx.class);
intent.addFlags(Intent, FLAG_ACTIVITY_NEW_TASK);
getApplicationContext.startActivity(intent);      

11.去掉ListView中各個item之間的橫線。

mListView.setDividerHeight(0);      

12.String中的split

"abcdsa.afac.casdf".split(".");//這樣是不行的
"afda.aafa.cadsfd.asd".split("\\.");//這樣就可以了      

在正規表達式中“.”為特殊字元,需要轉義

繼續閱讀