Android eclipse常見錯誤開發(fā)總結(jié)

出自于c博客.

----博主:紅日





使用Android開發(fā)工具eclipse的過程中,出現(xiàn)過很多問題,總結(jié)了一下,拿出來共同學(xué)習(xí):

問題1、ThisandroidSDK requires Android Developer Toolkit version 20.0.0 or above...

*在android_sdk_windows/tools/lib下的plugin.prop文件里把

#begin plugin.prop

plugin.verson=20.0.0

#end plugin.prop

變更為:

#begin plugin.prop

plugin.verson=18.0.0(其中這里的18.0.0是你目前的ADT版本)

#end plugin.prop

問題2:R cannot be resolved to a variable.

*方案一 系統(tǒng)自動添加了import android.R這條語句;這個時候只要刪除這條語句就可以了。

方案二 布局文件里多了個.out的xml文件,刪除這個xml文件,然后把工程clean下就可以了。

問題3:error opening trace file:No such file or directory.

這主要是android api的版本和模擬器(或手機)的版本不一致導(dǎo)致的。把項目和模擬器都改成相同版本的,就不報錯了。

問題4:FINAL EXCEPTION: main

Java.lang.RuntimeException:Unable to instantiate activity ComponentInfo{

com.項目名稱.包名.入口Activity名}:java.lang.ClassNotFoundException:com.chapter4layout3.入口Activity名.

原因分析:

AndroidManifest.xml中設(shè)置的“入口Activity名”并不是上面所提到的 Activity,即系統(tǒng)找不到Activity的入口,所以程序自然不能運行。

android:name = "com.chapter4layout3.ExpanListViewDemoActivity(入口Activity)從下面的MAIN知道是入口Activity,所要運行的Activity必須是此名"

android:label ="label"="@string/app_name">

問題5:

android - "Bitmap too large to be uploaded into a texture"

出現(xiàn)這個問題的時候可以把硬加速改為false,即在Manifest文件的application中加入如下語句:

android:hardwareAccelerated="false"就可以顯示出來。

問題6:

'ADB server didn't ACK'(The connection to adb is down, and a severe error has occured.)的解決辦法:

一般情況下1.先把任務(wù)管理器上所有的adb.exe關(guān)閉掉,重啟eclipse就可解決。但如果這種辦法不行的話,可以試試:

1、先把eclipse關(guān)閉。

2、在管理器站到你的android SDK的platform-tools下,鍵入adb kill-server,如果adb關(guān)閉了會提示server not running *

3、鍵入adb start-server 如果不成功會提示daemon not running.starting it now on port ***,而如果成功不提示任何語句的,這是再重新打開eclipse就可以正常運行了。

還有一種情況是開了豌豆莢,導(dǎo)致了端口沖突。

我遇到的問題就是USB線真的開始有問題了,沒連接好電話,所以出現(xiàn)adb一運行起來然后就消失的情況。⊙﹏⊙b汗。

問題7:

Unable to start activity ComponentInfo(....SecondActivity)java.lang.NullPointerException:

空指針異常:

空指針異常產(chǎn)生的主要原因:

1、當(dāng)一個對象不存在時又調(diào)用其方法會產(chǎn)生此異常obj.method()//obj對象不存在(比如一個對象str你沒有賦值,卻調(diào)用它就會出現(xiàn)空指針異常的情況)。

2、當(dāng)訪問或修改一個對象不存在的字段時會產(chǎn)生異常obj.method()//method方法不存在。

****我出現(xiàn)的問題是R.id.button01由于粗心寫成了R.layout.secondactivity這樣就找不到那個button01,所以會出現(xiàn)空指針異常。

空指針解決方法:

重點關(guān)注報錯發(fā)生的所在行,通過空指針異常 產(chǎn)生的兩條主要原因診斷具體的錯誤。同時為了避免空指針的發(fā)生,最好在做判斷處理時將“null”或者空值放到設(shè)定的值之前。

詳解:NullPointerException是空指針異常。但是在java中沒有指針,怎么會有空指針異常呢?在C++中,聲明的指針需要指向一個實例(通過new方法構(gòu)造),這個指針可以理解為地址。在java中,雖然沒有指針,但是有引用(通常稱為對象引用,一般直接說對象),引用也是要指向一個實例對象(通過new方法構(gòu)造)的,從這種意義上說,java中的引用于C++中的指針沒有區(qū)別,不同的是,處于安全的目的,在java中不能對引用進行操作,而在C++中可以直接進行指針的運算,例如book++等。

所以這里的NullPointerException雖然不是真正的空指針異常,但本質(zhì)上差不多,是因為引用沒有指向具體的實例,所以當(dāng)訪問這個引用的方法的時候就會產(chǎn)生這種異常,例如下面的代碼:

String str = "這是一個測試用的字符串!";

System.out.println(str.length());

這段代碼沒有問題,但是如果改成下面的代碼:

String str;

System.out.println(str.length);

就會產(chǎn)生NullPointerException異常了。那這種異常通常是如何產(chǎn)生的呢?比較多見的是下面的兩種情況:

1、把調(diào)用某個方法的返回值直接賦值給某個引用,單后調(diào)用這個引用的方法。在這種情況下,如果返回的值是null,必然會產(chǎn)生NullPointerException異常。例如:

String userName = request.getParameter("userName");

if(userName.length()==0)

.....

else

......

如果request.getParameter("userName")的結(jié)果為null,則這里就會產(chǎn)生這種異常。

2、在方法體中調(diào)用參數(shù)的方法。這種情況下,如果調(diào)用的方法的時候傳遞進來的值是null,也要產(chǎn)生NullPointerException異常。

要解決這種異常,只需要檢查異常出現(xiàn)在第幾行,然后查看調(diào)用了哪個對象的方法,然后檢查這個對象為什么沒有賦值成功即可。

要避免程序產(chǎn)生這種異常,比較好的解決方法是在調(diào)用某個對象的時候判斷這個對象是否為空,如果可能,則增加判斷的語句,例如上面的代碼可以寫成:

if(str!=null)

System.out.println(str.length());

else

System.out.println(0);

問題8:

如果MyAdapter中的getView()方法不執(zhí)行,那么就應(yīng)該調(diào)用adapter.notifyDataSetChanged();方法(此方法為BaseAdapter中的方法)

原因:

setAdapter 時,首先會執(zhí)行g(shù)etCount(),當(dāng)getCount() ?返回的是0時,就不會去執(zhí)行g(shù)etView()方法, 如果 開啟線程去下載數(shù)據(jù),然后在getCount()中返回其size, 開始的時候因為還沒有下載數(shù)據(jù),返回的size可能是0,所以不會去調(diào)用getView()方法,界面就不會被填充。 ? ?下載完成后 ?通過 notifyDataSetChanged()方法 重新加載適配器,就會調(diào)用getView()方法了。。

問題9:

java.lang.ClassNotFoundException:com.example.MainActivity

個人按下面順序排查:

1.

在Manifest.xml中查看Activity的名字是否書寫正確。

2.

在Manifest.xml確認(rèn)Activity標(biāo)簽中的android:name屬性的格式,例如我的activity的名字是helloworld,確認(rèn)android:name=”.helloworld”(其中的點很重要)。

3.

如果有添加外部包的情況下,在工程根目錄下建libs目錄,然后將需要導(dǎo)入的外部包放入此目錄內(nèi)再add jars(項目- -》屬性- -》- -》JavaBuild Path - -》Libraries 新加一個support-v4包)。

4.

如果上面都確保OK的情況下仍發(fā)生問題的話,clean工程->關(guān)閉eclipse->在命令行中重啟adb(adb kill-server adb start-server)->打開eclipse->編譯啟動。

問題10(關(guān)于viewflow的使用):

使用網(wǎng)絡(luò)上比較流行的舊版(也可以稱作修改后可以實現(xiàn)循環(huán)的版本)的時候,滑動圖片的時候,老是出現(xiàn)閃動。

解決方法是:

在AndroidManifest.xml文件中將android:targetSdkVersion = "17"這句話刪除掉就可以。

問題11(關(guān)于百度地圖的問題):

java.lang.NoClassDefFoundError: com.baidu.mapapi.BMapManager

解決辦法:

一、右擊項目->properties->javaBuild Path->Order and Export,在需要引用的包前面打勾。

二、Project->Clean...

問題12:

Caused by: java.lang.ClassCastException: com.fragments.Fragment1 cannot be cast to android.app.Fragment

的解決方法:

(1)app.fragment和v4.fragment都是可以使用標(biāo)簽的

只是在在使用的時候如果是app.fragment則沒有什么特殊的地方繼承Activity即 ? ? ?可。

(2)當(dāng)v4.fragment使用標(biāo)簽的時候就要特別注意了:

當(dāng)這個Activity的布局中有標(biāo)簽的時候,這個Activity必須繼承

FragmentActivity,否則就會報錯。

所以本錯誤的解決方法就是:將MainActivity繼承的Activity改成FragmentActivity即可。

問題13:

(非eclipse錯誤,按鈕點擊錯誤2014-3-17花費兩天時間搞定的一個問題):

GridView中的setOnItemClickListener不響應(yīng)的問題:

原因:由于在每個item中使用的類似于Button、ImageButton的按鈕,所以是button攔截了點擊事件。

解決方法:這個時候,需要將Button或ImageButton改換為ImageView,問題就得到了解決。

當(dāng)問題解決的時候,總是令人興奮的(感覺以前的苦惱都是值得的)。

問題14:

Installation error: INSTALL_FAILED_INSUFFICIENT_STORAGE

...

無效的存儲,存儲空間不足,卸掉幾個無用的APP即可解決問題。

問題15:

(在使用gridview的情況下--bitmapfun中的)

java.lang.ClassCastException: android.widget.AbsListView$LayoutParams cannot be cast to android.widget.RelativeLayout$LayoutParams

主要原因:就是AbsListview的LayoutParams不能準(zhǔn)換成.xml布局文件中的RelativeLayout的LayoutParams

問題16:

(在開啟虛擬機的情況下)出現(xiàn):

This application has requested the Runtime to terminate it in an unusual way.

Please contact the application's support team for more information.

可能問題:在創(chuàng)建AVD時設(shè)定的RAM過大(我選擇的device是Nexus 7,其默認(rèn)RAM是1024)。

解決方法:將這個值改為512后就能正常啟動AVD了

問題17(非錯誤;關(guān)于LogCat):

Eclipse LogCat出現(xiàn)大量"Unexpected value from nativeGetEnabledTags: 0"的解決方法:

在logcat的過濾器的log message字段中輸入以下過濾串:

^(?!.*(nativeGetEnabledTags)).*$

如果依然還有大量的信息出現(xiàn),可以考慮使用LogCat最上部的過濾搜索,直接搜索Text,或者tag:TAG.這樣就可以找到需要打印的信息。

問題18:

The connection to adb is down, and a severe error has occured.

解決方法:在Eclipse進入DDMS模式,重啟下ADB

問題19:

Ctrl+Alt+方向上下鍵:Eclipse中該快捷鍵用于復(fù)制該行代碼,但最近在Eclipse中卻沒任何效果。

可能問題:該快捷鍵被電腦中的某個應(yīng)用所占用。

解決方法:當(dāng)時原因就是網(wǎng)易云音樂的聲音調(diào)大調(diào)小的快捷鍵就是Ctrl+Alt+方向上下鍵,與Eclipse中的快捷鍵重復(fù)。

所以當(dāng)任何時候的快捷鍵不起作用的時候,都應(yīng)該想到該快捷鍵可能被某個應(yīng)用程序所占用了。

問題20:

Eclipse添加Android library錯誤的原因:

我這里是project和library沒有在同一個盤符下面。

所以:在windows系統(tǒng)下,library project必須和project處于相同的盤符中.

以后要養(yǎng)成的一個習(xí)慣是:導(dǎo)入project或library的時候,要勾選copy projects into workspace...以保證都在同一個盤符下面。

問題21:

Eclipse中Android SDK Manager中,未出現(xiàn)完整的API版本(或者說API版本得不到更新),解決方法:

1、在C:\Windows\System32\drivers\etc文件夾下面的hosts文件中添加如下信息:

#Google主頁

203.208.46.146 www.google.com

#這行是為了方便打開Android開發(fā)官網(wǎng) 現(xiàn)在好像不VPN也可以打開

74.125.113.121 developer.android.com

#更新的內(nèi)容從以下地址下載

203.208.46.146 dl.google.com

203.208.46.146 dl-ssl.google.com

2、在Eclipse中的Android SDK Manager中Tools -> Options -> others下面的第一個(force...)打上對勾即可。

問題22:

Eclips中l(wèi)ayout中的布局文件的Graphical Layout不顯示布局:

情況<1>(一般情況):

解決辦法:項目右鍵-->Android Tools-->Fix Project Properties,然后右鍵close項目-->open項目,再次打開,即可;

如果再次打開的時候,依然不可以,那么重啟Eclipse即可。

情況<2>(This version of the rendering library is more recent than your version of ADT plug-in. Please update ADT plug-in):

解決辦法:

1、更新ADT。2、更改右上角adt版本為低版本3、manifest.xml文件夾中sdk配置版本的更改

問題23:

Eclipse中查看不了系統(tǒng)的源代碼:即出現(xiàn):the source attachment does not contain the source for...時:

解決辦法:選擇最下面的folder按鈕,然后選擇相應(yīng)的路徑(我的選擇是:C:\Program Files (x86)\adt-bundle-windows-x86-20130514\sdk\sources\android-14\android),

即可解決該問題(另外:MyEclipse中如果想要查看Java的源代碼,那么選擇的是一個src壓縮的文件包,如我的路徑是:C:\Program Files (x86)\Java\jdk1.6.0_10)。

問題24:

(關(guān)于ListView的使用問題)

(1)listview中添加的footer不顯示時:

解決方法:將添加footer的代碼添加到listView.setAdaper(adapter)代碼之前。

(2)listView中footer出現(xiàn)不居中顯示的問題時:

解決方法:將布局文件中的ListView的屬性改為MATCH_PARENT。

問題25:

導(dǎo)入android-support-v7-appcompat.jar包時出現(xiàn):Jar mismatch! Fix your dependencies:

我的問題是:兩個包v4與v7都在項目中,所以引起了沖突。

解決方法是:將v4包刪除即可。

問題26:

問題:微信打包后還是分享不了

解決方法是:

微信分享不了:

1、測試沒有打包(打包成apk測試)

2、打包的keystore跟微信開放平臺上面的不一致, 導(dǎo)致MD5碼不一致(在微信填寫的MD5是小寫,冒號要去掉)

3、分享參數(shù)錯誤(微信指定平臺分享有參數(shù)類型,每個類型對應(yīng)的有相應(yīng)的參數(shù),建議用戶先用網(wǎng)絡(luò)圖片測試,調(diào)通后再用本地圖片,onekeyshare沒有參數(shù)類型,會自動判斷)

4、應(yīng)用沒有審核通過

5、包名跟開放平臺上面的不一致

6、沒有在mob.com申請key!

我的解決方法是:

在微信開放平臺上下載簽名生成工具,下載地址:https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&t=resource/res_list&verify=1&id=open1419319167&lang=zh_CN

將APK項目及簽名工具都安裝到手機上,簽名工具中輸入報名,即可獲取簽名,經(jīng)該簽名重新填到微信上的應(yīng)用簽名。

問題27:

問題:修改手機系統(tǒng)字體大小時,雖然添加相應(yīng)代碼,但還是會有個別字體發(fā)生變化(華為手機)

解決方法是:

將相應(yīng)字體的sp改為dp即可

問題28:

問題:如何無線調(diào)試運行

1、cd到adb所在的目錄

2、命令行輸入adb tcpip 5555

3、斷開 USB數(shù)據(jù),在計算機命令行輸入 adb connect <設(shè)備的IP地址>:5555

4、如果需要斷開連接:adb disconnect <設(shè)備的IP地址>

問題29:

問題:已安裝了簽名沖突的同名數(shù)據(jù)包

原因分析:由于前一個APP是eclipse運行出來的,而后一個版本是打包出來的,所以簽名會有沖突。

解決方法是:重新打個包安裝,再次更新就會避免出現(xiàn)這個問題。

問題30:

問題:使用 eclipse 的 svn 查看歷史版本亂碼的問題

原因分析:編碼問題

解決方法是:Windows--Preferences--General--WorkSpace--Text file Encoding (other UTF-8)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

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