1. 程式人生 > >異常彙總

異常彙總

1.Caused by: android.util.AndroidRuntimeException: Calling startActivity() from outside of an Activity context requires the FLAG_ACTIVITY_NEW_TASK flag. Is this really what you want?

Context中有一個startActivity方法,Activity繼承自Context,過載了startActivity方法。如果使用Activity的startActivity方法,不會有任何限制,而如果使用Context的startActivity方法的話,就需要開啟一個新的task,遇到上面那個異常的,都是因為使用了Context的startActivity方法。解決辦法是,加一個flag。

intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);  

2.Caused by: android.view.InflateException: Binary XML file line #2: Error inflating class com.sailang.toucnhdemo.MyLayout

這個異常指出了出錯的位置,是在XML檔案的第2行。一般遇到這種錯誤都是拼寫錯誤,可能是你把包名寫錯了,要不就是大小寫錯誤,你需要認真檢查一下。

3.Activity has leaked window ******** was originally added here

這個會導致程式崩潰。

按字面瞭解,Window Leaked大概就是說一個窗體洩漏了,也就是我們常說的記憶體洩漏,為什麼窗體會洩漏呢?

產生原因:
我們知道Android的每一個Activity都有個WindowManager窗體管理器,同樣,構建在某個Activity之上的對話方塊、PopupWindow也有相應的WindowManager窗體管理器。因為對話方塊、PopupWindown不能脫離Activity而單獨存在著,所以當某個Dialog或者某個PopupWindow正在顯示的時候我們去finish()了承載該Dialog(或PopupWindow)的Activity時,就會拋Window Leaked異常了,因為這個Dialog(或PopupWindow)的WindowManager已經沒有誰可以附屬了,所以它的窗體管理器已經洩漏了。

android.view.Window Leaked一般會發生在Activity 與Dialog的顯示。

Activity 中create 一個Dialog,若你先關閉Dialog再關閉Activity就是正常的,若你先關閉Activity再關閉Dialog就會報錯這個android.view.WindowLeaked錯誤了。
分析這個原因是:Dialog是基於Activity而建立的:new ProgressDialog(this);this 就是Activity。 Activtity先finish,那Dialog就沒得依附了,所以就會報android.view.WindowLeaked。

解決方法:
關閉(finish)某個Activity前或者在onDestroy()中,要確保附屬在上面的Dialog或PopupWindow已經關閉(dismiss)了。
也可在OnCreateDialog()中建立Dialog,讓系統去管理對話方塊。

4.java.lang.NullPointerException

 at android.widget.ArrayAdapter.createViewFromResource(ArrayAdapter.java:355)

空指標錯誤,這種錯誤提示資訊沒有涉及自己的應用類。其實是,自己的應用採用了API級別比較高的功能,可是卻在android低版本上執行,由於找不到,所以才會報空指標異常。

  setListAdapter(new ArrayAdapter<BookContent.Book>(getActivity(),
    android.R.layout.simple_list_item_activated_1,
    android.R.id.text1, BookContent.ITEMS));

如上面的程式碼:android.R.layout.simple_list_item_activated_1是API11提供的,如果你在API8上執行就會報錯。

解決辦法就是呼叫API8的就可以啦!

5. java.lang.ClassCastException: android.view.SurfaceView

有時候在寫程式的時候就會遇到很詭異的錯誤,提示是型別裝換錯誤,可是,我確定我沒有弄錯,但是,它就是報這個錯,而且,會提示一行錯誤位置,可是這行和SurfaceView沒關係,也沒有轉換錯型別。真的很詭異。

大招來了:

這是你點選Project->clean

eclipse--->project----->clean... 選項
將工程中的.class檔案刪除,同時重新編譯工程(Java檔案),類似於jbuild中的rebuild。

6.java.lang.RuntimeException: setAudioSource failed.

解決方案:(來源於網路)

在實現鋼琴軟體的錄音過程中,出現java.lang.RuntimeException: setAudioSource failed報錯。

好多資料說需要在AndroidManifest.xml檔案中增加如下配置以授予程序錄制聲音的許可權:

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

新增之後,依舊出現如上報錯,考慮到可能跟SDcard有關係,於是又增加了以下語句:

<uses-permission

android:name="android.permission.WRITE_EXTERNAL_STORAGE">

</uses-permission>

問題解決,可以實現正常錄音。

 7.live555 demux connection timeout

live555 demux Failed to connect with rtsp://192.....

我們在使用VLC for android時,會遇到上面的錯誤,很是鬱悶,就這一個問題,你能鬱悶幾小時,因為你都不懂什麼是live555。

最後,偶然知道怎麼回事了!

因為你沒有在manifest中增加

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

其實,可以理解,因為你需要去訪問rtsp地址,所以需要INTERNET許可權。