使用单独的类而不是一个MainActivity时出现NullPointerException

时间:2013-02-28 19:59:16

标签: android android-view android-fragmentactivity android-context android-maps-v2

我正在尝试开发一个带有谷歌地图v2,位置服务和一些控制按钮的Android应用程序。

我不想把所有这些东西放在一个MainActivity类中,所以我想我可以将所有代码分成更多的类。 MainActivity将控制所有GUI事物并对地图或位置事件做出反应。

现在我有以下问题。在我的onCreate中,我实现了额外的类:

// 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

我尝试在Prefs()类中保存应用程序上下文。但我不知道如何在我的附加课程中使用它。 :(

有人能帮助我吗?

非常感谢!!!

和Thorsten

1 个答案:

答案 0 :(得分:0)

尝试将mainActivity.getContext()(不是getApplicationContext())作为MyMap构造函数方法中的参数传递,并在构造函数中将该值设置为type属性。然后使用该上下文,例如:context.findViewById(...)或context.getText(...)

祝你好运!