2012-11-17 48 views
3

找不到類似的問題,所以: 我有一堆類似的異常報告。它並不指向我的應用程序的任何地方。我認爲這可能會發生,當應用程序試圖恢復視圖的狀態和傳遞給容器的對象是空值。NullPointerException在View.dispatchRestoreInstanceState(View.java:9938)Android 4.0.3/4.0.4

我正在使用android-support-v4 lib的片段+ Parcelable接口來存儲對話框片段中的數據。使用Project API 16的API 16的Android項目目標。

根據報告,此崩潰僅在4.0.3和4.0.4設備上顯示。

有沒有人遇到過這樣的問題?

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.my/com.my.activities.MyActivity}: java.lang.NullPointerException 
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1956) 
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981) 
at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:3351) 
at android.app.ActivityThread.access$700(ActivityThread.java:123) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1151) 
at android.os.Handler.dispatchMessage(Handler.java:99) 
at android.os.Looper.loop(Looper.java:137) 
at android.app.ActivityThread.main(ActivityThread.java:4424) 
at java.lang.reflect.Method.invokeNative(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:511) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 
at dalvik.system.NativeStart.main(Native Method) 
Caused by: java.lang.NullPointerException 
at android.view.View.dispatchRestoreInstanceState(View.java:9938) 
at android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:2318) 
at android.view.View.restoreHierarchyState(View.java:9921) 
at com.android.internal.policy.impl.PhoneWindow.restoreHierarchyState(PhoneWindow.java:1625) 
at android.app.Activity.onRestoreInstanceState(Activity.java:906) 
at android.app.Activity.performRestoreInstanceState(Activity.java:878) 
at android.app.Instrumentation.callActivityOnRestoreInstanceState(Instrumentation.java:1100) 
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1934) 
... 12 more 

在此先感謝!

回答

0

你是否有機會使用意圖獲取/放置額外功能?你的日誌中間有一個NullPointerException,這可能是由於將一個空值賦給額外值導致的 - Android app unable to start activity componentinfo

+0

是的,我使用PUT/GET演員。我已經認爲這可能是原因,這就是爲什麼我初始化我的對象類的非參數構造函數中的所有值(也如抽象基類)。我檢查了它在不同的設備和Android API版本,它沒有傳遞空值... –

+0

你還檢查設備是否有錯誤?如果不是的話,這樣做似乎是個好主意 - 如果在使用額外功能之前,如果值爲空,可以運行檢查並在日誌中打印一些消息以確認它? –

+0

是的,我現在在Android 4+設備上做了很少的測試,並且工作正常。此外,它是工作正常之前,我明確地在非arg析構函數中添加值初始化... –

1

我自己一直在遇到這個錯誤。像你一樣,我只通過崩潰報告收到了這個錯誤。我從來沒有能夠自己重現它。不幸的是,我還沒有找到解決方案。但是,通過GrepCode查看Android源代碼,我相信我有一些線索。

if (mActionBar != null) { 
    SparseArray<Parcelable> actionBarStates = 
     savedInstanceState.getSparseParcelableArray(ACTION_BAR_TAG); 
    mActionBar.restoreHierarchyState(actionBarStates); 
} 

(來自http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/4.0.3_r1/com/android/internal/policy/impl/PhoneWindow.java#PhoneWindow.restoreHierarchyState%28android.os.Bundle%29兩者)​​

我的猜測是,NPE是由於actionBarStates是:在PhoneWindow.restoreHierarchyState(),飛機墜毀在下面的代碼片段調用restoreHierarchyState()內發生空值。它在4.1或更高版本中不會發生,因爲4.1添加了actionBarStates的空檢查。

我無法確定這是否是4.0.x操作欄,Android支持庫或操作欄/菜單配置中的錯誤。

+0

謝謝,但你建議做什麼?我會在我們的應用程序的下一個版本中嘗試它。 –

+0

不幸的是,我沒有解決方案。我的直覺是,這是支持庫在Android OS 4.0.x上處理2.x選項菜單時的一個錯誤(我仍然在我的應用中使用2.x樣式選項菜單(onCreateOptionsMenu,onPrepareOptionsMenu))。如果這是唯一的解決方法是(1)停止使用支持庫,(2)消除所有選項菜單,或(3)將所有選項菜單轉換爲4.x風格的操作欄項目。由於(1)和(2)對我來說是不可接受的,我沒有時間去做(3),所以我現在只是與bug一起生活。 –

2

發現又一個骯髒的工作。

感謝Bill Blume對造成問題的原因有所瞭解。

Jus重寫您的活動的onRestoreInstanceState方法,並處理異常,如下所示。再次

@Override 
protected void onRestoreInstanceState(Bundle savedInstanceState) { 
    try{ 
     super.onRestoreInstanceState(savedInstanceState); 
    }catch (Exception e) { 
     System.out.println("Exce"); 
    } 
} 

由於膽紅素布魯姆

+0

終於!謝謝! –

相關問題