Nullpointer on被调用方法的活动(例如activity:getListView或getAssets等)

时间:2010-11-12 12:37:40

标签: android android-emulator

我面临的问题在下面的代码中说明。我试图从另一个类调用一个'方法',直到它到达一个活动(如getListView()或getAssets())

致电课程:

public class Main extends Activity {
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.main);
    Utils ut = new Utils();
    ut.initiateMainMenu();
  }
}

被叫类(方法:initiateMainMenu):

public class Utils extends ListActivity {

  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
      initiateMainMenu();
  }

  public void initiateMainMenu() {
    listView = getListView();
    assetManager = getAssets();
    etc...
  }
}

在上面的示例中,当使用intent启动第一个类(Main)时,会出现nullpointer。

nullpointer在以下行中给出,具体取决于首先出现的行:

listView = getListView();
assetManager = getAssets();

直接使用类Utils时,不会发生相同的空指针。

我希望上面的描述足以解决我的问题。

亲切的问候, 康拉德

3 个答案:

答案 0 :(得分:1)

如果您在主活动中持有列表视图,而不是这样做,这对我来说似乎很奇怪,将列表视图添加到R.layout.main并从ListActivity扩展您的类。您可以摆脱Utils,并在Main中包含所有与listview相关的代码。

或许有关您假装实施的内容的更多信息可能有所帮助......

GER

答案 1 :(得分:0)

解决方案很简单,您的Utils类的上下文永远不会被初始化,即Utils类的onCreate方法永远不会被调用或失焦,或者由于其他原因导致ListView永远不会被初始化。

您可以执行以下操作:

  1. 反向调用和保持句柄列表,可能使用静态关键字。
  2. 或者可以尝试将代码更改为您的initiateMainMenu()的getApplicationContext.getListView()/ Utils.this.getListView;
  3. 我不知道这会起什么作用,但这个问题背后的基本原因是未初始化的listView导致NULL

答案 2 :(得分:0)

我所面临的困难并未完全描述,因为我的Java知识不足以将其识别为问题。

我正在做的是使用三个相互继承的活动。即Activity,MenuActivity(我自己的扩展)和ListActivity。我现在使用的快速而肮脏的解决方案是一个重复的类。一个类包含扩展活动的MenuActivity,另一个类包含扩展 ListActivity 的MenuActivity。