天天看點

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常見錯誤及分析