Я пытаюсь разработать приложение для Android с помощью google map v2, службы определения местоположения и некоторых кнопок управления.Исключение NullPointer при использовании отдельных классов вместо одного MainActivity
Я не хочу помещать все эти вещи в один класс 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() класса. Но я не знаю, как использовать его в моих дополнительных классах. :(
Может кто-нибудь мне помочь, пожалуйста?
Большое спасибо !!!
Торстен
Опубликуйте свой логарифм. Какая строка бросает нулевой указатель? – Kaediil
['NullPointerException'] (http://developer.android.com/reference/java/lang/NullPointerException.html) – 2013-02-28 20:14:18
Я сломал проблему на findFragmentById(). Если я пишу 'SupportMapFragment f = ((SupportMapFragment) fmanager.findFragmentById (R.id.map)); ' f это все время null. Кажется, что findFragmentById не находит фрагмент. Он работает, если я помещаю этот код в свой MainActivity. – Ikarisan