0

我想開發一個谷歌地圖V2,位置服務和一些控制按鈕的Android應用程序。NullPointer異常時,使用單獨的類而不是一個MainActivity

我不想把所有這些東西放在一個MainActivity類中,所以我想我可以把所有的代碼分成更多的類。 MainActivity應控制所有的GUI,並對地圖或位置事件作出反應。

現在我有以下問題。在我的onCreate我instanziate附加類:

// Preferences as singleton 
pref = Prefs.getInstance(this.getApplicationContext()); 
pref.loadSettings(); 

// Set up the location 
loc = new Locations(pref); 
loc.setCallback(this); 

map = new MyMap(pref); 

它似乎工作正常。但是每次我啓動應用程序時,在MyMap類中都會拋出一個空指針異常。我不知道爲什麼以及如何預防它。當調用MyMap()時,將執行以下代碼:

[...] 
private Prefs pref; 
private GoogleMap mMap; 
[...] 

public MyMap(Prefs prefs) { 
    pref = (Prefs) prefs; 
    if (mMap == null) { 
     FragmentManager fmanager = getSupportFragmentManager(); 
     mMap = ((SupportMapFragment) fmanager.findFragmentById(R.id.map)).getMap(); 
[...] 
} 

帶有findFragmentById的行是導致異常的行。我認爲這是由於片段管理器無法訪問我的MainActivity中加載的佈局而導致的。但是我怎樣才能訪問我的MainActivity中定義的片段和視圖元素?

每類有以下頭:

public class XYZ extends android.support.v4.app.FragmentActivity implements XXX, YYY 

我想救我的首選項()類中的應用程序上下文。但我不知道如何在我的其他課程中使用它。 :(

有人能幫助我嗎?

非常感謝你!

托爾斯滕

+0

發佈你的logcat。什麼行是拋出空指針? – Kaediil 2013-02-28 20:07:54

+0

['NullPointerException'](http://developer.android.com/reference/java/lang/NullPointerException.html) – 2013-02-28 20:14:18

+0

我將問題分解到findFragmentById()。如果我寫 'SupportMapFragment f =((SupportMapFragment)fmanager.findFragmentById(R.id.map)); ' f總是空。似乎findFragmentById沒有找到該片段。它可以工作,如果我把這個代碼放入我的MainActivity中。 – Ikarisan 2013-02-28 20:47:53

回答

0

嘗試通過mainActivity.getContext()(未getApplicationContext())在您的構造函數的參數(...)或context.getText(...)

祝你好運!

+0

謝謝! 我現在使用這個: 'public MyMap(Prefs prefs,SupportMapFragment mapFragment){ pref = prefs; mapFrag = mapFragment; } ' – Ikarisan 2013-03-07 22:42:10

相關問題