2013-04-24 48 views
0

我最近被推遲更新我的應用以使用谷歌地圖API v2。 (谷歌最終終止了爲v1授予API密鑰的權利。)我已經實現了新API,與我的應用程序一樣工作,以達到我的滿意。除此之外,我注意到發生了一個奇怪的錯誤。更新到新的Android Google Maps API v2後,奇怪的NullPointerException崩潰

當我轉到使用SupportMapFragment的活動時,按回到上一個活動,然後再次前進到SupportMapFragment活動,它將隨機崩潰...有時很快,有時需要一分鐘。唯一改變的是我使用新的API,因此重構的代碼使用新的API。

04-25 08:00:24.415: W/dalvikvm(12746): threadid=28: thread exiting with uncaught exception (group=0x40b9f930) 
04-25 08:00:24.445: E/AndroidRuntime(12746): FATAL EXCEPTION: Thread-1711 
04-25 08:00:24.445: E/AndroidRuntime(12746): java.lang.NullPointerException 
04-25 08:00:24.445: E/AndroidRuntime(12746): at libcore.net.http.RequestHeaders.addCookies(RequestHeaders.java:285) 
04-25 08:00:24.445: E/AndroidRuntime(12746): at libcore.net.http.HttpEngine.prepareRawRequestHeaders(HttpEngine.java:724) 
04-25 08:00:24.445: E/AndroidRuntime(12746): at libcore.net.http.HttpEngine.sendRequest(HttpEngine.java:217) 
04-25 08:00:24.445: E/AndroidRuntime(12746): at libcore.net.http.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:282) 
04-25 08:00:24.445: E/AndroidRuntime(12746): at libcore.net.http.HttpURLConnectionImpl.getResponseCode(HttpURLConnectionImpl.java:495) 
04-25 08:00:24.445: E/AndroidRuntime(12746): at maps.z.bk.run(Unknown Source) 
04-25 08:00:24.475: W/ActivityManager(517): Force finishing activity com.___.___/com.___.___.activities.ActivityWithMap 
04-25 08:00:24.625: D/overlay(158): Unset pipe=VG0 dpy=0; Unset pipe=VG1 dpy=0; Unset pipe=RGB1 dpy=0; 
04-25 08:00:37.398: I/Process(12746): Sending signal. PID: 12746 SIG: 9 
04-25 08:00:37.418: I/ActivityManager(517): Process com.___.___ (pid 12746) has died. 
04-25 08:00:37.418: W/ActivityManager(517): Force removing ActivityRecord{4178d2a8 u0 com.___.___/com.___.___.activities.PreviousActivity}: app died, no saved state 
04-25 08:00:37.428: W/InputDispatcher(517): channel '41e3b688 com.___.___/com.___.___.activities.PreviousActivity (server)' ~ Consumer closed input channel or an error occurred. events=0x9 
04-25 08:00:37.428: E/InputDispatcher(517): channel '41e3b688 com.___.___/com.___.___.activities.PreviousActivity (server)' ~ Channel is unrecoverably broken and will be disposed! 
04-25 08:00:37.428: W/InputDispatcher(517): Attempted to unregister already unregistered input channel '41e3b688 com.___.___/com.___.___.activities.PreviousActivity (server)' 
04-25 08:00:37.428: I/WindowState(517): WIN DEATH: Window{41a48790 u0 com.___.___/com.___.___.activities.ActivityOther} 
04-25 08:00:37.428: I/WindowState(517): WIN DEATH: Window{41e3b688 u0 com.___.___/com.___.___.activities.PreviousActivity} 

如果有幫助,似乎如果我要回MapFragment活動後關閉屏幕和關閉,以更快地崩潰......

我知道它是與開始的兩次活動,但是我不能在任何會導致這種奇怪的崩潰的地方看到任何東西,另外,它不會發生在v1 ... bleh上。

是否嘗試過谷歌多次試圖弄明白太...

而且,如果這能幫助,異常似乎在一個單獨的線程bk.run(),如堆棧跟蹤注意到發生,但我的應用程序繼續在我的設備上運行,而它在Eclipse中被暫停,直到我讓該線程去,然後應用程序實際崩潰。

我還證實,當我去與地圖片段活動兩次,即使我從來沒有做任何的地圖,甚至呼籲SupportMapFragment的GetMap(),發生崩潰所以它肯定是某種地圖片段問題或Google地圖加載問題。在旋轉也崩潰(如活性被重建)

+1

請發佈整個堆棧跟蹤。真正的原因是降低... – Simon 2013-04-24 22:13:22

+0

是的,請張貼整個痕跡。關閉袖口,這感覺就像是一個Maps V2的bug,但也許我們會看到其他跟蹤可能有用的東西。 – CommonsWare 2013-04-24 22:46:15

+0

編輯,不幸的是,實際的堆棧跟蹤只是我最初發布的...... :(還有幾條線我認爲可能從logcat有用。 – nocnock 2013-04-25 14:32:52

回答

0

事實證明,問題是由我的應用程序執行以下行導致當應用程序啓動:

CookieHandler.setDefault(new CustomCookieManager()); 

然後,如果該行有之前執行的地圖會在第二次進入活動之後崩潰。

這解釋了爲什麼stacktrace顯示addCookies發生崩潰。該應用程序甚至不再使用Cookie管理器,因此我所要做的就是取出該行。

我知道它必須是我的應用程序與示例不同的東西,並最終找到了它。

不知道這是否仍然是一個地圖api v2中與Cookie有關的bug?可能不會?我的應用程序可能一直在處理cookies錯誤。 (可能除非將其設置爲默認值,否則不要對管理員進行任何操作)......無論如何,現在至少我可以毫無問題地使用它們!