Нулевой указатель на действия для вызываемого метода (например, действие: getListView или getAssets и т. Д.) - PullRequest
0 голосов
/ 12 ноября 2010

Проблема, с которой я сталкиваюсь, указана ниже в коде. Я пытаюсь вызвать «метод» из другого класса, который работает хорошо, пока не достигнет активности (например, 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...
  }
}

В приведенном выше примере нулевой указатель возникает, когда первый класс (Main) запускается с намерением.

Нулевой указатель указывается в следующих строках в зависимости от того, какая строка стоит первой:

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

Тот же нулевой указатель не возникает, когда класс Utils предназначен напрямую.

Надеюсь, приведенного выше описания достаточно для решения моей проблемы.

С уважением, Конрад

Ответы [ 3 ]

1 голос
/ 12 ноября 2010

Если вы держите представление списка в своей основной деятельности, вместо того, чтобы делать это, что мне кажется странным, добавьте представление списка в R.layout.main и расширьте свой класс из ListActivity. Вы можете избавиться от Utils и иметь весь связанный с списком код в Main.

Или, может быть, вам поможет дополнительная информация о том, что вы делаете, чтобы реализовать ...

Ger

0 голосов
/ 15 ноября 2010

Сложность, с которой я столкнулся, не была полностью описана, потому что мои знания Java не были достаточны для определения ее как проблемы.

Я использовал три вида деятельности, которые наследуются друг от друга.А именно Activity, MenuActivity (мой собственный расширенный) и ListActivity.Быстрое и грязное решение, которое я сейчас использую, является дублирующим классом.Один класс содержит расширение MenuActivity Activity , а другой - расширение MenuActivity ListActivity .

0 голосов
/ 12 ноября 2010

Что ж, решение простое, ваш контекст для класса Utils никогда не инициализируется, то есть метод onCreate класса Utils никогда не вызывается или не в фокусе, или по какой-то другой причине ваш ListView никогда не инициализируется.

Вы можете сделать следующее:

  1. Обратные вызовы и удержание дескриптора для списка, возможно, используется статическое ключевое слово.
  2. Или, возможно, попробуйте изменить код на getApplicationContext.getListView () / Utils.this.getListView вашего initiateMainMenu ();

Я не знаю, в какой степени это будет работать, но основной причиной этой проблемы является неинициализированный listView, что приводит к NULL .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...