1. 程式人生 > >Android開發中常見問題小結

Android開發中常見問題小結

解決辦法: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、如何解決載入大圖片出現的記憶體溢位問題? 解決辦法:首先,儘量不要使用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中配置相應的圖片資源, 否則在不同解析度機器上都是同樣大小(畫素點數量),顯示出來的大小就不對了。 6、無法載入xml中的view,報 java.lang.NullPointerException 異常;
解決辦法:可能忘記載入activity的layout檔案: setContentView(R.layout.main); 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 - 我們可以把它看做一個畫圖工具,比如畫筆、畫刷。他管理了每個畫圖工具的字型、顏色、樣式。 開發工具為Android Studio 編譯工具為gradle,
  1. Execution failed for task ':mergeDebugResources'

    錯誤2:Execution failed for task ':mergeDebugResources'.
    > Error: Failed to run command:
            D:\soft_dev\android-sdk-windows\android-sdk-windows\build-tools\19.1.0\a
    apt.exe s -i E:\Aworkspace\NewWorkspace\VipOneToOneGradleTest\res\drawable-xhdpi
    \white.png -o E:\Aworkspace\NewWorkspace\VipOneToOneGradleTest\build\intermediat
    es\res\debug\drawable-xhdpi-v4\white.png
    Error Code:
            42
    Output:
            libpng error: Not a PNG file

    解決:這時候是不是感覺很迷茫,出錯了對吧,下面就告訴你是怎麼回事,怎麼出錯的。
    錯誤很簡單卻也很難發覺,原因就是在這張圖片上,為什麼是圖片上呢,剛開始的時候你的圖片是不是.jpg格式的,然而你把字尾名改成了.png的以為就可以了是吧,其實不是這樣,你只是把格式改成了.png,其實它還是.jpg格式的。要將圖片真正轉換成.png格式的才行。隨便找個圖片轉換工具就可以解決。

    注意:在存放圖片時千萬不要將格式為.jpg的圖片改成.png格式,千萬不要偷懶,一定要將格式轉換成PNG格式的圖片,否則編譯將不通過。切記!!!!

  2.  Missing one of the key attributes 'action#name,category#name' on element
     intent-filter at AndroidManifest.xml:342:13
    Output:
            res\drawable-xhdpi-v4\white.png:0: error: Resource entry white is alread
    y defined.
            res\drawable-xhdpi-v4\white.jpg:0: Originally defined here.

    ce\NewWorkspace\Vi
     非法字元: \65279
    解決:
    由於java檔案是已utf-8-bom的形式儲存的,至於為何導致了這種情況,無需考究,通過editplus開啟檔案就可以看到。然後另存為utf-8形式就可以了。再將修改了編碼的檔案替換專案中報錯的檔案,錯誤就解決了

  3. FAILURE: Build failed with an exception.
    * What went wrong:Execution failed for task ':lint'.

    > Lint found errors in the project; aborting build.

    Fix the issues identified by lint, or add the following to your build script to proceed with errors:

android {

    lintOptions {

      abortOnError false

    }

}

解決:這種錯誤根據英文提示直接解決就可以了