天天看點

Android開發中java.lang.RuntimeException: Unable to start activity ComponentInfo{xxx}: java.lang.NullPoi

版權聲明:本文為部落客原創文章,轉載請标明出處。 https://blog.csdn.net/chaoyu168/article/details/50836538

錯誤資訊字元串:java.lang.RuntimeException: Unable to start activity ComponentInfo{com.first/com.first.Game}: java.lang.NullPointerException

一般都會在Activity  onCreate()方法裡的setContentView(XXX)發生此錯誤,網上查閱了很多原因,大概有四種重要可能的原因:

原因一:xxx的錯誤,若為R.layout.main  那麼應該是main.xml檔案中的标簽 使用錯誤,最常見的而且編譯器不會提示的錯誤就是 android:name 和 android:id兩者混淆,仔細檢查main.xml的标簽是否全部正确

原因二:在setContentView(view)方法之後使用了requestWindowFeature()方法,并且在此錯誤下面會提示requestFeature必須在setContentView之前使用,隻需要把requestWindowFeature()方法放在setContentView(view)方法之前就可以解決

原因三:在onCreate()方法之外,并且不屬于任何一個方法體内直接給某控件findById(R.id.xx)所導緻,需要在某方法内并且在setContentView(view)方法之前進行findById(R.id.xx)即可解決

原因四:在setContentView(view)之前沒有對view進行執行個體化,隻進行了聲明而直接 setContentView(view) 所導緻,仔細檢查view是否setContentView(view)調用之前并在方法内進行執行個體化即可解決

原因五:因為發生了空指針的錯誤異常,是以你應該檢查一下比如 Spinner 或者 list 這類的東西裡面是否有值存在本人APP。

在原生Android下編譯APK,編譯沒有問題,但是在運作的時候經常出現如标題所描述的異常,然後整個程式Crash掉......

    我遇到該問題常常都是因為修改了資源檔案所引起,大緻有以下幾種方式來解決:

    1. 引用類名問題:自定義了一個View,将他用于布局檔案中,假設他的包名叫MyPackage,類名叫MyTestView,這個時候你在XML作為布局元素來布局的話,必須使用完整路徑名,也就是包名加類名來引用,用MyPackage.MyTestView來進行引用。

    2.構造函數問題:自定義一個View,必須派生實作基類View的三個構造函數

    View(Context context)     //Simple constructor to use when creating a view from code

    View(Context context, AttributeSet attrs)     //Constructor that is called when inflating a view from XML

    View(Context context, AttributeSet attrs, int defStyle)     //Perform inflation from XML and apply a class-specific base style

    從文檔上的介紹來看,第二個和第三個構造函數對于XML這種引用方式是必須實作的,這三個構造函數應該是在不同的應用場合來執行個體化一個View對象。

    3.編譯的中間檔案沒有清理幹淨:第三種就是你在原生系統代碼的編譯環境下編譯APK之後,特别是修改了XML,出現标題所述現象,這個時候你隻需要删除out目錄下編譯生成的中間檔案夾即可(具體名字記不清了:在編譯過程中,系統會将那個位置列印出來,通過序列槽來看吧,.../out/....../..../classes.dex,你循着這個路徑往前推到你的應用的project名字那一層檔案夾),删除再重新make就OK了。

    4.找不到資源檔案:我原來在2.3的原生系統增加動态桌面的時候,動态桌面一跑起來就出這個異常,然後crash,當時就是因為找不到drawable的資源檔案,于是當時我把drawable的hdpi或nodpi等檔案夾的圖檔資源都拷貝一份到drawble下,問題解決(當時一直不明白系統會根據分辨率來選擇加載不同drawable下檔案夾的資源,為什麼這裡必須放入drawable中)。

繼續閱讀