【问题标题】:NullPointer Exception when using seperate classes instead of one MainActivity使用单独的类而不是一个 MainActivity 时出现 NullPointerException
【发布时间】:2013-02-28 19:59:16
【问题描述】:

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

我不想将所有这些东西放在一个 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() 类中。但我不知道如何在我的附加课程中使用它。 :(

有人可以帮帮我吗?

非常感谢!!!

索斯滕

【问题讨论】:

  • 发布您的日志猫。哪一行抛出空指针?
  • 我将问题分解为 findFragmentById()。如果我写SupportMapFragment f = ((SupportMapFragment) fmanager.findFragmentById(R.id.map)); f 总是空的。似乎 findFragmentById 没有找到片段。如果我把这段代码放在我的 MainActivity 中,它就可以工作。

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


【解决方案1】:

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

祝你好运!

【讨论】:

  • 谢谢!我现在正在使用这个:` public MyMap(Prefs prefs, SupportMapFragment mapFragment) { pref = prefs; mapFrag = mapFragment; } `
猜你喜欢
  • 2019-12-28
  • 2018-05-14
  • 2015-06-30
  • 1970-01-01
  • 1970-01-01
  • 2019-03-24
  • 1970-01-01
  • 2021-12-10
  • 2017-01-03
相关资源
最近更新 更多