1. 程式人生 > >專案銷燬主頁Attempt to invoke virtual method 'java.lang.Object android.content.Context.getSystemService異常

專案銷燬主頁Attempt to invoke virtual method 'java.lang.Object android.content.Context.getSystemService異常

專案需求,專案退出登入的時候,跳轉登入頁面,重新登入,會重新進入首頁。很簡單的需求,只需在退出的時候將儲存的使用者資訊銷燬,把之前活躍的activity銷燬,重新跳轉進入登入介面即可。但是在真正執行退出登入的時候,卻出現了問題:退出登入銷燬主頁的時候,因為主頁裡面巢狀fragment,fragment中執行這自定義控制元件,導致在銷燬的時候,出現

java.lang.NullPointerException: Attempt to invoke virtual method ‘java.lang.Object android.content.Context.getSystemService(java.lang.String)’ on a null object reference

報錯,於是改變思路,將首頁資料不銷燬,在退出登入的時候不銷燬主頁,先跳轉主頁,然後從主頁去跳轉登入頁面,登入成功之後銷燬登入頁面,然後直接進入了主頁,從而實現了該需求。。如此聰明如我。

但是,,but,,然鵝並沒有什麼卵用,原因是我們的專案是兩個客戶端在一塊的,就是使用者用不同身份的賬戶進入的頁面是不一樣的,主頁也是不一樣的,只是說根據賬戶的不同登入進入不同的賬戶,那麼問題就來了,如果使用者剛開始使用的賬戶是商家的,退出登入之後使用使用者的賬戶去登入,按照之前的思路,首頁是沒有變化的,就會依舊使用商家的介面,介面啥的都不一樣,資料也不同,於是,,撲街,,,,

木辦法,上個方案失敗,繼續,依然銷燬主頁,然後跳轉進入登入頁面,退出登入之後只有一個登入頁面存在,至於之前導致崩潰的情況就想辦法解決,問題出在當activity被銷燬時重建,其上的view的狀態和資料會被儲存,以便資料恢復。所以在單獨的fragment中不讓狀態儲存就可以避免這個問題:

在Main中重寫protected void onSaveInstanceState(Bundle outState);如下
/**
* 當activity銷燬時不儲存其內部的view的狀態
*@paramoutState
*/
@Override
public voidonSaveInstanceState(Bundle outState) {
//將super呼叫取消即可,表明當意外(比如系統記憶體吃緊將應用殺死)發生我不需要儲存Fragmentde狀態和資料等
//super.onSaveInstanceState(outState);
}

問題解決,記錄下