Android異常描述和處理情形

**1.Caused by: java.lang.ClassCastException: **android.widget.TextView cannot be cast to android.widget.Button ClassCastException:類型轉(zhuǎn)換錯(cuò)誤,TextView不能轉(zhuǎn)換位Button,原因是我在findViewById的時(shí)候?qū)extView的一個(gè)聲明成button,還有就是講findViewById前面的(TextView)寫(xiě)成(Button)

**2.Caused by: java.lang.IllegalStateException: **ScrollView can host only one direct child
根據(jù)報(bào)錯(cuò)信息提示,ScrollView控件下面必須有且只有一個(gè)子布局,不要將ScrollView當(dāng)ListView等布局來(lái)直接在其中編寫(xiě)控件,而要先在ScrollView控件中寫(xiě)入LinearLayout,然后再將其他子控件寫(xiě)入到LinearLayout;

**3.java.lang.IllegalStateException: **Cannot add header view to list -- setAdapter has already been called.
原因是我的ListView需要addHeadView();但是我是在setAdapter()方法之后才addHeadView的,但奇怪的是,這種做法在4.0版本上都沒(méi)有報(bào)錯(cuò),在4.0版本上面報(bào)錯(cuò);

4.我在寫(xiě)一個(gè)布局文件的時(shí)候需要將一個(gè)按鈕的監(jiān)聽(tīng)器OnClickListener在按鈕點(diǎn)擊之后重新設(shè)置(也就是在OnClickListener監(jiān)聽(tīng)器響應(yīng)之后就改變這個(gè)監(jiān)聽(tīng)器),在Android4.0上面這個(gè)更改過(guò)的OnClickListener在響應(yīng)完一次后,又恢復(fù)到了原來(lái)的OnClickListern監(jiān)聽(tīng)器,但是在2.3則維持了改變后的OnCLickListener;

5.Invalid project description
今天我在導(dǎo)入一個(gè)Library項(xiàng)目時(shí),出現(xiàn)了這個(gè)提示,搜索的結(jié)果是項(xiàng)目中.project文件中name可能是因?yàn)槟愕墓こ堂煌斐傻奈覚z查后并沒(méi)有發(fā)現(xiàn)不同,后來(lái)想到導(dǎo)入Library的項(xiàng)目時(shí),Library項(xiàng)目和導(dǎo)入Library的項(xiàng)目需要處在同一級(jí)目錄下,于是我將Library復(fù)制到workspace,這樣就好了;

今天又遇到同樣的問(wèn)題,度娘和谷哥都是說(shuō)項(xiàng)目中的.project中的name和項(xiàng)目名字不一樣,但我的確實(shí)不是這個(gè)問(wèn)題,后來(lái)看一篇博文說(shuō)的是因?yàn)锳ndroidManifest.xml文件版本不同造成的,解決辦法是將項(xiàng)目復(fù)制到其他地方再導(dǎo)入即可,我將項(xiàng)目從workspace中復(fù)制到桌面導(dǎo)入,果然可以了。

6.Migrate Android Code
這是我在從svn下載一個(gè)項(xiàng)目時(shí)遇到的,搜索的結(jié)果基本是將代碼中的switch cases 改成 if else的方式,在eclipse中可以使用 ctrl+1快捷方式切換,具體原因我還不清楚,如果你知道原因,請(qǐng)回復(fù)或者
發(fā)我郵件,謝謝;

7.Eclispe無(wú)法識(shí)別Android SDK的目錄

可以嘗試升級(jí)adt來(lái)解決這個(gè)問(wèn)題

8.最新版的adt無(wú)法創(chuàng)建R文件

打開(kāi)Android SDK Manager,勾選第一個(gè)目錄中的Anroid SDK Build-tools并下載安裝即可

9. JAVA開(kāi)發(fā)和Android開(kāi)發(fā)最常遇到的異常(沒(méi)有之一),每一個(gè)學(xué)JAVA的人都對(duì)他恨之入骨,由于其可能導(dǎo)致的原因眾多,我就講講我遇到的情況,我是因?yàn)橛胢ap獲取一個(gè)不存在的key導(dǎo)致爆出空指針異常

10.java.lang.NoClassDefFoundError:com.umeng.analytics.MobclickAgent
android 植入友盟/廣告異常, ADT18對(duì)引用的jar有要求,要求jar包要放到項(xiàng)目下的libs里才可以找到,否則apk不會(huì)包含該jar包。

11.Unable to execute dex: Multiple dex files define Landroid/support/v4/app/ActivityCompatHoneycomb;
libs下的android-support-v4.jar重復(fù),將android-support-v4.jar刪除即可

12.com.android.ide.eclipse.adt.internal.project.AndroidManifestHelper] Unable to read C:\AndroidManifest.xml: java.io.FileNotFoundException: C:\AndroidManifest.xml (系統(tǒng)找不到指定的文件。)

  • Win7 下
    進(jìn)入:C:\Users\(當(dāng)前用戶).android
    刪除:debug.keystore,ddms.cfg 二文件
  • xp
    進(jìn)入:C:\Documents and Settings\Administrator.android
    刪除:debug.keystore,ddms.cfg 二文件2、重啟 eclipse

13.[2013-06-04 09:56:29 - xxx] Re-installation failed due to different application signatures.
[2013-06-04 09:56:29 - xxx] You must perform a full uninstall of the application. WARNING: This will remove the application data![2013-06-04 09:56:29 - xxx] Please execute 'adb uninstall com.xxxx.xxx' in a shell.[2013-06-04 09:56:29 - xxx] Launch canceled!原因是手機(jī)或者模擬器里面裝了已經(jīng)發(fā)布的帶有自己簽名的apk了,但是項(xiàng)目開(kāi)發(fā)中用的是自帶的模擬debug證書(shū),解決辦法就是英文提示所說(shuō)的,刪除模擬器或手機(jī)里面已經(jīng)安裝過(guò)得項(xiàng)目apk,然后再run一下項(xiàng)目即可

14.The library 'android_xxxxxxxxx.jar' contains native libraries that will not run on the device.
在網(wǎng)上搜索的方法不能解決我的問(wèn)題,最后在stackoverflow發(fā)現(xiàn)了一個(gè)解決辦法,在Eclipse上面設(shè)置,選擇windows——preferences——android——build,取消勾選改設(shè)置頁(yè)面Build Setting的第一個(gè)和第二個(gè)復(fù)選框即可

如圖所示:

15.java.lang.NoClassDefFoundError:com.umeng.analytics.MobclickAgent
添加友盟sdk出現(xiàn)的錯(cuò)誤,解決辦法是右鍵項(xiàng)目,選擇“Properties”,然后點(diǎn)擊Java Builde Path——Order and Export,將未勾選的jar包復(fù)選框勾選確定即可

如圖所示:


16.LogCat無(wú)法輸出日志信息
將LogCat關(guān)掉重新打開(kāi)即可,點(diǎn)擊LogCat右邊的叉號(hào)即可關(guān)閉LogCat,然后點(diǎn)擊Windows——Show View,看看有沒(méi)有LogCat,有的話就選擇,LogCat就會(huì)彈出,沒(méi)有的話,點(diǎn)擊other,在彈出框中點(diǎn)擊Android文件夾,選擇LogCat即可

如果重啟LogCat還不行的話,可以重啟Eclipse

java.io.IOException: 您的主機(jī)中的軟件中止了一個(gè)已建立的連接。        at sun.nio.ch.SocketDispatcher.write0(Native Method)  
      at sun.nio.ch.SocketDispatcher.write(Unknown Source)  
      at sun.nio.ch.IOUtil.writeFromNativeBuffer(Unknown Source)  
      at sun.nio.ch.IOUtil.write(Unknown Source)  
      at sun.nio.ch.SocketChannelImpl.write(Unknown Source)  
      at com.android.ddmlib.JdwpPacket.writeAndConsume(JdwpPacket.java:213)  
      at com.android.ddmlib.Client.sendAndConsume(Client.java:575)  
      at com.android.ddmlib.HandleHeap.sendREAQ(HandleHeap.java:348)  
      at com.android.ddmlib.Client.requestAllocationStatus(Client.java:421)  
      at com.android.ddmlib.DeviceMonitor.createClient(DeviceMonitor.java:854)  
      at com.android.ddmlib.DeviceMonitor.openClient(DeviceMonitor.java:822)  
      at com.android.ddmlib.DeviceMonitor.processIncomingJdwpData(DeviceMonitor.java:781)  
      at com.android.ddmlib.DeviceMonitor.deviceClientMonitorLoop(DeviceMonitor.java:649)  
      at com.android.ddmlib.DeviceMonitor.access$100(DeviceMonitor.java:42)  
      at com.android.ddmlib.DeviceMonitor$3.run(DeviceMonitor.java:577)  

原因是打開(kāi)了兩個(gè)Eclipse,關(guān)掉其中的一個(gè)即可

18.Failed to allocate memory: 8 This application has requested the Runtime to terminate it in an unusual way.
Please contact the application's support team for more information.
原因是使用的模擬器的分辨率太高了,已經(jīng)超出了你電腦實(shí)際分辨率的尺寸,我創(chuàng)建的模擬器是pad,但是它的寬度已經(jīng)超過(guò)了我電腦的實(shí)際分辨率,所以出現(xiàn)了這個(gè)問(wèn)題。

19.sun.misc.BASE64Encoder無(wú)法導(dǎo)入這個(gè)方法

按說(shuō)是sun的方法,jdk應(yīng)該直接可以用的,但其實(shí)這個(gè)jar是jre/lib/rt.jar,我們需要右鍵項(xiàng)目->屬性->java bulid path->在Libraries選項(xiàng)下點(diǎn)擊jre System Library->access rules->resolution,在彈出的框里面上面選擇accessible,下面填上** ,然后點(diǎn)擊確定即可,還有就是其實(shí)不推薦使用java自帶的base64方法,大家在實(shí)際項(xiàng)目中可以去使用apache的base64方法。

20.升級(jí)了ADT22之后報(bào)java.lang.NoClassDefFoundError錯(cuò)誤

右鍵項(xiàng)目名稱-->>Build Path-->>Configure Build Path-->>在Order and Export中選中Android Private Libraries-->>OK

最后點(diǎn)擊Project-->>clean一下當(dāng)前項(xiàng)目就ok了.

(如果還是沒(méi)有成功的話,就選中Order and Export中所有的, 然后再clean一下.)

21.騰訊微博分享更改REDIRECT_URI出錯(cuò)(無(wú)法更改REDIRECT_URI)

學(xué)習(xí)騰訊微博的demo,由于使用了Library庫(kù),所以講APP_KEY、APP_KEY_SEC和REDIRECT_URI都填入到了AndroidSDK項(xiàng)目的src——config——config.properties中,運(yùn)行一下后報(bào)錯(cuò),返回信息是errorcode:10015,這是因?yàn)槲姨畹腞EDIRECT_URI不對(duì),然后我將原路徑的REDIRECT_URI改掉了,但是運(yùn)行之后還是原來(lái)的錯(cuò)誤,后來(lái)我將APP_KEY、APP_KEY_SEC和REDIRECT_URI全部換成同事申請(qǐng)可用的,但是在我這里還是一開(kāi)始的錯(cuò)誤,我懷疑可能是bin目錄有問(wèn)題,但是clean之后運(yùn)行還是不行,后來(lái)發(fā)現(xiàn)在demo項(xiàng)目的Android Private Libraries下面有4個(gè)jar包,其中3個(gè)是騰訊微博所需要的,在Android_SDK.jar下面有同樣的config.properties文件,里面的
APP_KEY、APP_KEY_SEC和REDIRECT_URI是舊的,我的解決辦法就是把所有的demo中的libs中的jar全部刪除,然后直接引用libraries

22.Eclipse運(yùn)行項(xiàng)目安裝時(shí)出現(xiàn):Installation error: INSTALL_FAILED_INSUFFICIENT_STORAGE這個(gè)錯(cuò)誤的字面意思就是:“安裝失敗,內(nèi)存不足”,如果是真機(jī)出現(xiàn)這種情況,將手機(jī)中的app刪掉幾個(gè)就可以了,如果是模擬器出現(xiàn)這個(gè)情況,網(wǎng)上的答案是使用命令行:emulator -avd MyAndroid -partition-size 120

23.今天在運(yùn)行一個(gè)項(xiàng)目的時(shí)候出現(xiàn)了這個(gè)問(wèn)題:Caused by: java.lang.ClassNotFoundException: android.support.v4.ViewPager

一般情況下,出現(xiàn)這種情況下都是因?yàn)轫?xiàng)目中缺少android-support-v4.jar或者沒(méi)有引用這個(gè)jar包引起的,但是當(dāng)我在項(xiàng)目中新疆libs目錄,并拷貝android-support-v4.jar包到libs引用之后,這個(gè)問(wèn)題還是不能解決,最后我在stackoverflow上面找到了解決辦法:右鍵選擇項(xiàng)目Project->Properties->Java Build Path than select Order and export,然后點(diǎn)擊右邊的TOP按鈕,將android-support-v4.jar或其所在的libraries置頂,最后clean一下項(xiàng)目即可運(yùn)行

24.Caused by: android.util.AndroidRuntimeException: Calling startActivity() from outside of an Activity context requires the FLAG_ACTIVITY_NEW_TASK flag. Is this really what you want?
出現(xiàn)此錯(cuò)誤主要是我們使用context.startActivity()方法造成的,因?yàn)槭褂肅ontext的startActivity方法需要開(kāi)啟一個(gè)新的task,增加intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);即可。

25.這是最經(jīng)一段時(shí)間我在windows平臺(tái)打包常見(jiàn)的一個(gè)錯(cuò)誤(adt升級(jí)為22之后),困擾了我很久,終于找到了解決辦法


控制臺(tái)提示錯(cuò)誤為:

[2013-07-12 10:46:15 - xxxx] Warning: 
org.apache.commons.httpclient.ChunkedInputStream: can't find 
referenced class 
org.apache.commons.logging.LogFactory     。。。。

解決辦法是在項(xiàng)目中的proguard-project.txt文件中添加:-ignorewarnings和-libraryjars libs/xx.jar,記得將libs的所有jar包都按照這樣的格式寫(xiě)


最后就可以正常打包了

26:java.io.IOException: Can't read [...\libs\comments-httpclient-3.0.1.jar] (No such file or directory)

這個(gè)錯(cuò)誤也是在打包的時(shí)候發(fā)生的,如同字面意義上面說(shuō)的一樣,就是沒(méi)有找到comments-httpclient-3.0.1.jar這個(gè)jar,可能是項(xiàng)目中沒(méi)有這個(gè)文件,我遇到這個(gè)問(wèn)題是因?yàn)槲以趐roguard-project.txt添加-libraryjars libs/comments-httpclient-3.0.1.jar時(shí)將jar包的名字寫(xiě)錯(cuò)了,所以導(dǎo)致了這個(gè)問(wèn)題

解決辦法就是在proguard-project.txt中將jar包名更正即可正常打包

27.Failed to create the Java Virtual Machine

原因是本機(jī)內(nèi)存不夠,而eclipse方法區(qū)(Perm Gen)占用內(nèi)存太多的緣故解決辦法是找到eclipse的解壓目錄中的eclipse.ini文件打開(kāi)編輯,

如下圖

另一個(gè)辦法是在eclipse.ini文件中增加jvm的完整路徑,

-vm
D:\Java\jdk1.6.0_29\bin\javaw.exe
注意這個(gè)參數(shù)的放置位置,我放在文件最下面時(shí)還是不行,放在-vmargs參數(shù)上面就可以了。

詳情請(qǐng)看:http://blog.csdn.net/yuanfei_1988/article/details/5919168

28.Can't bind to local 8700 for debugger
在運(yùn)行項(xiàng)目的時(shí)候,控制臺(tái)出現(xiàn)如上錯(cuò)誤,應(yīng)該是端口問(wèn)題,在Stack Ovleflow上找到解決辦法是:打開(kāi)Eclipse——Windows——Preferences——Android——DDMS;
然后將Base local debugger port中的8600改為8601,然后選中Use ADBHOST,在ADBHOST value中填127.0.0.1

29.R文件報(bào)錯(cuò),其中有一個(gè)String資源報(bào)錯(cuò)

寫(xiě)完demo之后發(fā)現(xiàn)R文件報(bào)錯(cuò),clean了之后還是報(bào)錯(cuò),然后打開(kāi)R.java查看,發(fā)現(xiàn)只有一行報(bào)錯(cuò),然后我仔細(xì)數(shù)了一下String資源有17個(gè),再打開(kāi)自己的value/string.xml文件,發(fā)現(xiàn)自己的只有16個(gè),最后一行是只有,未定義,所以有問(wèn)題,刪掉這一行就行了

30.獲取sqlite數(shù)據(jù)庫(kù)某一字段"id"只能讀取到第一行

我在寫(xiě)一個(gè)數(shù)據(jù)庫(kù)查詢方法的時(shí)候出現(xiàn)了只能讀取一個(gè)第一個(gè)數(shù)據(jù)的情況,通過(guò)debug和對(duì)比其他語(yǔ)句發(fā)現(xiàn),原來(lái)的在Cursor cursor = db.rawQuery(sql,null),之后沒(méi)有使用
while(cursor.moveToNext()){}
方法來(lái)遍歷獲取cursor中的數(shù)據(jù),而是寫(xiě)成了
if(cursor.moveToNext()){}
的方法,if語(yǔ)句只會(huì)執(zhí)行一次,獲取第一條數(shù)據(jù),然后就執(zhí)行下面的語(yǔ)句了,而while()語(yǔ)句只要符合括號(hào)中的條件就會(huì)繼續(xù)執(zhí)行。

31.啟動(dòng)PopupWindow報(bào)NullPointerException空指針異常

代碼例子:

LayoutInflater mLayoutInflater = (LayoutInflater) mContext.getSystemService(LAYOUT_INFLATER_SERVICE);  
View view = mLayoutInflater.inflate(R.layout.music_popwindow, null);  
PopupWindow mPopupWindow = new PopupWindow(view, LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT);  
mPopupWindow.showAtLocation(findViewById(R.id.main), Gravity.RIGHT|Gravity.CENTER, 0, 0);

上面的代碼是一個(gè)PopupWindow的創(chuàng)建過(guò)程,但是我們?cè)赽utton的點(diǎn)擊事件中運(yùn)行這段代碼卻會(huì)報(bào)空指針,原因在最后一行,showAtLocation(parent, gravity, x, y)方法出了問(wèn)題,而報(bào)NullPointerException的地方正是parent即findViewById(R.id.main)為空,因?yàn)檫@里根本沒(méi)有獲得PopupWindow的parent,第二行代碼的View獲取了xml布局文件,parent應(yīng)該在view中實(shí)例化,正確的代碼應(yīng)該是

mPopupWindow.showAtLocation
(view.findViewById(R.id.main)
, Gravity.RIGHT|Gravity.CENTER, 0, 0);
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容