Android常見錯誤及解決辦法(一直更新)

大家可以把自己知道的寫在回覆中 幫助擴展此博客 (添加的內容會註釋上奉獻人的博客  樂於奉獻 幫助他人

1、 Failed to install on device 'emulator-5554': timeout



解決辦法:eclipse -> window -> Preferences -> Android ->
DDMS -> ADB connection time out(ms).把這個時間設置的長一些,默認是5秒,
改成20秒就可以了。


2、找不到activity類: android.content.ActivityNotFoundException: Unable to find explicit activity class {xxxx}


解決辦法:在AndroidMainifest.xml中註冊找不到的activity
如:<activity android:name=".xxxActivity" >
        </activity>
3、無法使用網絡:Permission denied(maybe missing internet permission) 等等提提示 麼有權限的 (黃色字體提示)
解決辦法:在AndroidMainifest.xml中增加允許使用網絡選項(在</application>結束標籤之後>):

<uses-permission android:name="android.permission.INTERNET" />

其他的使用權限,也應該在要使用時到AndroidMainifest.xml添加權限,比如:我們在開發手機藍牙功能時,就必須添加相應的藍牙權限。
4、 如何提高ListView的刷新效率?
解決辦法:基於AbsListView類的控件比如 ListView、GridView等等都需要通過綁定Adapter來實現數據更新,這裏操作Adapter我們一般設計的儘量佈局文件簡練高效些,比如佈局使用Java代碼編寫代替Xml文件,控制刷新範圍,可以考慮ArrayAdapter,而不是BaseAdapter的派生類。
5、如何解決加載大圖片出現的OOM內存溢出問題?

解決辦法:首先,儘量不要使用setImageBitmap或setImageResource或BitmapFactory.decodeResource來設置一張大圖, 因爲這些函數在完成decode後,最終都是通過java層的createBitmap來完成的,需要消耗更多內存。 其次,可以改用先通過BitmapFactory.decodeStream方法,創建出一個bitmap,再將其設爲ImageView的 source, decodeStream最大的祕密在於其直接調用JNI>>nativeDecodeAsset()來完成decode, 無需再使用java層的createBitmap,從而節省了java層的空間。 如果在讀取時加上圖片的Config參數,可以跟有效減少加載的內存,從而跟有效阻止拋out of Memory異常 。另外,decodeStream直接拿的圖片來讀取字節碼了, 不會根據機器的各種分辨率來自動適應, 使用了decodeStream之後,需要在hdpi和mdpi,ldpi中配置相應的圖片資源, 否則在不同分辨率機器上都是同樣大小(像素點數量),顯示出來的大小就不對了。

點擊這裏:第一個:有關詳細的圖片加載以及防止OOM的方法  第二個:有關詳細的圖片加載以及防止OOM的方法2

6、無法加載xml中的view,報 java.lang.NullPointerException 異常;
解決辦法:可能忘記加載activity的layout文件:

setContentView(R.layout.main);

如果是引用的非activity的View則

View view=LayoutInfliter.form(Context).inflater(R.layout.*****);

view.findViewById(****);//記得是view.


7、Intent intent=new Intent();
        intent.setClass(Activity1.this,Activity2.class);
        startActivity(intent);
        使用Intent打開另一個Activity時,可能出現以下錯誤:
“sorry! the application has stopped unexpectedly,please try again”.
解決辦法:要啓動的Activity沒有在AndroidManifest.xml文件中聲明,解決方法當然是聲明該Activity
8、 在新的線程中 public class HttpThread extends Thread {...}
增加一個彈出窗體:
new AlertDialog.Builder(this).setTitle("數據加載失敗").setMessage("請檢查網絡連接情況")
.setPositiveButton("OK", new DialogInterface.OnClickListener()
{            
    public void onClick(DialogInterface dialoginterface, int i){}            
}).show();
出現:java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare();
解決辦法:
不能在線程中操作UI界面,應該按如下方法:
new AlertDialog.Builder(com.nantsing.infoquery.chuanbo_detail.this).setTitle("數據加載失敗").setMessage("請檢查網絡連接情況")           .setPositiveButton("OK", new DialogInterface.OnClickListener(){    public void onClick(DialogInterface dialoginterface, int i){}


9、Android如何動態改變ImageView的大小
解決辦法:在layout.xml文件中定義了ImageView的絕對大小後,無法動態修改以後的大小顯示,其實平臺在設計UI控件時考慮到這個問題,爲了適應不同的Drawable可以通過在xml的相關ImageView中加入android:scaleType="fitXY" 這行即可,但因爲使用了縮放可能會造成當前UI有所變形。使用的前提是限制ImageView所在的層,可以使用一個內嵌的方法限制顯示。


10、Android中bitmap的平移操作如何完成?
解決辦法:對於平移我們可以通過Canvas類的public void translate (float dx, float dy) 方法來實現,參數一爲平面x軸的位置,類型爲浮點型,參數二爲y軸的位置。不使用Matrix類,我們可以直接構造一個空的Bitmap對象,通過Canvas類提供的drawBitmap方法畫出我們需要的Bitmap對象,然後調用translate方法來實現平移,比如將位圖向右平移2個像素,可以爲translate(2,0) 而向下移動3個像素translate(0,-3)。
11、Android中ListView在ScrollView中無法正常顯示
解決辦法:對於ListView放在ScrollView中時,目前Android平臺仍然存在bug,狀態是顯示的ListView僅僅是一行半。通過Layout佈局屬性設置目前仍然無法修正。通過分析ListView和ScrollView的構造沒有發現好的解決辦法。但是可以通過自己實現ListView來解決。一種方案是:重寫ListView的onMeasure()重新計算顯示行數。第二種方案是:使用RelaiveLayout佈局方式,可以滿足ScrollView構造。


12、Android中Drawable,Bitmap,Canvas以及Paint的關係與區別?


Bitmap - 稱作位圖,一般位圖的文件格式後綴爲bmp,當然編碼器也有很多如RGB565、RGB888。作爲一種逐像素的顯示對象執行效率高,但是缺點也很明顯存儲效率低。我們理解爲一種存儲對象比較好。
Drawable - 作爲Android平下通用的圖形對象,它可以裝載常用格式的圖像,比如GIF、PNG、JPG,當然也支持BMP,當然還提供一些高級的可視化對象,比如漸變、圖形等。
Canvas - 名爲畫布,我們可以看作是一種處理過程,使用各種方法來管理Bitmap、GL或者Path路徑,同時它可以配合Matrix矩陣類給圖像做旋轉、縮放等操作,同時Canvas類還提供了裁剪、選取等操作。

Paint - 我們可以把它看做一個畫圖工具,比如畫筆、畫刷。他管理了每個畫圖工具的字體、顏色、樣式。

13.我們寫的更新界面的部分代碼沒有反應,比如:Toast顯示,alterDialog,更新UI等

以上的錯誤很可能是因爲你的這部分代碼寫在了異步線程中了  記着所有的能改變界面顯示的代碼必須全部寫在主線程中 

在異步線程的時候就用Handler發送過去再更新

14. Eclipse中籤名導出apk崩潰,手動簽名。
工程沒問題,調試也沒問題,但打包的時候eclipse會崩潰,解決方法是手動打包。
首先去工程目錄下的bin文件夾下找到apk文件,解壓後刪除META-INF文件夾,重新打包成壓縮包,改後綴名爲.apk
首先是簽名(假設你已經在根目錄下生產了密鑰keystore):
進入java安裝目錄/bin文件夾下:
./jarsigner  -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore android.keystore ~/Output.apk android
然後是優化,進入sdk的tools文件夾下,運行。
./zipalign -v 4 ~/Output.apk Output_realase.apk
當前目錄下Output_realase.apk就是打包簽名好的apk了。

15.android.view.InflateException: Binary XML file line #異常的解決
創建自定義view的時候,碰到 android.view.InflateException: Binary XML file line #異常,反覆研究
後發現是缺少一個構造器造成。
public MyView(Context context,AttributeSet paramAttributeSet)
{
      super(context,paramAttributeSet);

補齊這個構造器,異常就消失了.


16.INSTALL_FAILED_INSUFFICIENT_STORAGE(感謝小夥伴xyz125301的貢獻
原因:SD卡內存容量不夠
法一:在“Additional Emulator Command Line Options”中加上“-partition-size 128”
法二:啓動模擬器,然後進入菜單
settings->applications->mange applications-> select the application->select "unistall".
這樣就能徹底刪除了,然後再重新安裝這個apk就沒問題了

推薦另外一篇相關文章:IOS常見錯誤及分析

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章