1. 程式人生 > >關於android在fragment中呼叫getActivity()功能進行Toast或者setAdapter時空指標的異常

關於android在fragment中呼叫getActivity()功能進行Toast或者setAdapter時空指標的異常

最近幾天發現線上版本,多了好多NullPointerException空指標異常的錯誤。仔細檢查發現大多實在fragment中呼叫getActivity方法時造成的。我想原因可能是使用者請求網路了但是一直沒結果就點選返回按鈕了,你的activity被finish掉了但是非同步任務還在進行,所以你在onPostExecute()方法為介面卡新增資料或者Toast時就會造成空指標異常。我的解決辦法一種是你在fragment中呼叫getActivity()之前都判斷一下

if(getActivity == null){

return;

}

但是這種方法有點繁瑣。另一種方法是你提前建立一個activity物件,最後一種方法是傳遞你的應用的Application物件替代getActivity(),例如:
public class MyApplication extends Application {
	private static DaoMaster daoMaster;
	private static DaoSession daoSession;
	private static MyApplication mInstance;
	
	public static MyApplication getInstance(){
		return mInstance;
	}
	
	@Override
	public void onCreate() {
		super.onCreate();
		if(mInstance == null){
			mInstance = this;
		}
}
然後就是toast時呼叫:<p class="p1">Toast.makeText(MyApplication.getInstance()<span style="font-family: Arial, Helvetica, sans-serif;">, "你的內容"</span><span style="font-family: Arial, Helvetica, sans-serif;">,</span><span style="font-family: Arial, Helvetica, sans-serif;">Toast.</span><span class="s2" style="font-family: Arial, Helvetica, sans-serif;">LENGTH_SHORT</span><span style="font-family: Arial, Helvetica, sans-serif;">).show();</span></p>