Android常見(jiàn)錯誤匯總
1.R.java消失或解析異常
本文引用地址:http://dyxdggzs.com/article/201610/305868.htm查看res中資源文件,圖片,xml等。比如圖片文件名不能有大寫(xiě)不能有空格。
搞定錯誤之后Project->clean就可以了。
2.自定義title欄。
首先要z在values->styles中定義一個(gè)style,然后在mainfest文件中設置android:theme.
最后在A(yíng)ctivity中按照這個(gè)順序寫(xiě):
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);
setContentView(R.layout.activity_main);
getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.title_layout);
3.SQLite isFirst和isBeforeFirst方法的區別:
看下面一段代碼
Cursor c = queryTheCursor(type);
if(c.moveToLast())
while (!c.isBeforeFirst()) {
String tmpContent = new String();
tmpContent = c.getString(c.getColumnIndex(content));
contents.add(tmpContent);
c.moveToPrevious();
}
c.close();
代碼的作用是逆序輸出表中的內容,第三行如果用的是isFirst()的話(huà)就無(wú)法輸出第一行,正確做發(fā)是用isBeforeFirst()。
4.eclipse刪除空行
在eclipse中刪除某一行就用ctrl+D快捷鍵。如果你想刪除一個(gè)文件中的所有空行呢。
可以用下面方法。
1)打開(kāi)源碼編輯器
2)使用快捷鍵Ctrl+f
3)在Find輸入框中輸入:^s*n
4)Replace With輸入框的值為空
5)在【Options】選中的Regular expressions
6)點(diǎn)擊【Replace All】按鈕。
7)OK!
5.getX()和getRawX()的區別
getX()是表示W(wǎng)idget相對于自身左上角的x坐標
而getRawX()是表示相對于屏幕左上角的x坐標值(注意:這個(gè)屏幕左上角是手機屏幕左上角,不管activity是否有titleBar或是否全屏幕),getY(),getRawY()一樣的道理
6.imagView居中顯示問(wèn)題
xml設置如下:
android:layout_width=fill_parent
android:layout_height=wrap_content
android:layout_gravity=center
android:orientation=vertical >
android:layout_width=wrap_content
android:layout_height=wrap_content
android:id=@+id/myImageView
android:layout_gravity=center
android:scaleType=matrix
android:src=@drawable/pic >
7.synchronized引發(fā)了 java.util.ConcurrentModificationException
如果多個(gè)線(xiàn)程同時(shí)訪(fǎng)問(wèn)一個(gè) ArrayList 實(shí)例,而其中至少一個(gè)線(xiàn)程從結構上修改了列表,那么它必須 保持外部同步。
解決方法:初始化的時(shí)候 將ArrayList改為CopyOnWriteArrayList;
原理:
JAVA中將引用從一個(gè)對象移到另外一個(gè)對象不需要消耗CPU時(shí)間,可以看做是一個(gè)原子操作。
JAVA中如果一個(gè)對象仍舊存在引用,則不會(huì )被CG回收。
CopyOnWriteArrayList就是根據以上兩個(gè)特點(diǎn),在列表有更新時(shí)直接將原有的列表復制一份,并再新的列表上進(jìn)行更新操作,完成后再將引用 移到新的列表上。舊列表如果仍在使用中(比如遍歷)則繼續有效。如此一來(lái)就不會(huì )出現修改了正在使用的對象的情況(讀和寫(xiě)分別發(fā)生在兩個(gè)對象上),同時(shí)讀操 作也不必等待寫(xiě)操作的完成,免去了鎖的使用加快了讀取速度。
8.獲取隨機顏色
并不用每次都生成三個(gè)隨機數,下面兩條語(yǔ)句就可以了:
Random myRandom=new Random();
int ranColor = 0xff000000 | mRandom.nextInt(0x00ffffff);
10.去掉Activity的標題欄,全屏顯示
在manifest文件中修改對應的Avtivity屬性。
android:theme=@android:style/Theme.NoTitleBar.Fullscreen
11.如何修改應用名稱(chēng)及應用圖標
修改程序的圖標,修改drawable文件夾的i→→c_launcher.png圖標,把新的圖標改名覆蓋就可以了。
如果你要自己的名稱(chēng),可以修改AndroidManifest.xml的這個(gè)節點(diǎn),application android:icon=@drawable/ic_launcher,不需要加文件擴展名。
即使這么做了,真機調試的時(shí)候可能還是會(huì )有一些問(wèn)題,比如圖標沒(méi)辦法改變,這個(gè)時(shí)候就需要在Eclipse中新建一個(gè)不同名的項目,然后轉移代碼(有點(diǎn)小麻煩~_~!)。
12.關(guān)于調試方法
調試的時(shí)候程序如果出錯,一般是查看logcat,看error發(fā)生的地方,會(huì )提示在程序的第幾行,然后去找就可以了。
但有些錯誤沒(méi)辦法定位,那就把日志輸出成txt,然后去google,baidu吧。
13.Couldn't read row 0, col -1 from CursorWindow. Make sure the Cursor is initialized correctly before accessing data from it.
錯誤1:請求的字段在數據庫的表中不存在,一般是大小寫(xiě)沒(méi)寫(xiě)對;
錯誤2:編程的中途改變表的字段,實(shí)際字段并沒(méi)有改變,解決方法是卸載當前版本,再安裝調試。
14.android.content.res.Resources.loadXmlResourceParser
在傳遞string類(lèi)做參數的地方傳了int形變量。
15.android.content.res.Resources$NotFoundException
出現此類(lèi)異常時(shí),可以根據 Resource ID到資源類(lèi)R中找相關(guān)的資源。比如0x7f030000,對應的是city_item布局文件,就可以將問(wèn)題縮小到更小的范圍。對于這類(lèi)運行時(shí)找不到資 源,但資源又確實(shí)存在的問(wèn)題,可能的編譯打包時(shí)出現問(wèn)題,沒(méi)有將該資源加入??尚薷囊幌略撡Y源,讓編譯器重新編譯。
還有試一下Project ->Clean一下這個(gè)項目 也可以的。
評論