0

Я пытаюсь разработать приложение для 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() класса. Но я не знаю, как использовать его в моих дополнительных классах. :(

Может кто-нибудь мне помочь, пожалуйста?

Большое спасибо !!!

Торстен

+0

Опубликуйте свой логарифм. Какая строка бросает нулевой указатель? – Kaediil

+0

['NullPointerException'] (http://developer.android.com/reference/java/lang/NullPointerException.html) – 2013-02-28 20:14:18

+0

Я сломал проблему на findFragmentById(). Если я пишу 'SupportMapFragment f = ((SupportMapFragment) fmanager.findFragmentById (R.id.map)); ' f это все время null. Кажется, что findFragmentById не находит фрагмент. Он работает, если я помещаю этот код в свой MainActivity. – Ikarisan

ответ

0

Попробуйте прохождение mainActivity.getContext() (не getApplicationContext()) в качестве аргумента в конструкторе метод для MyMap и внутри конструктора задает это значение атрибуту типа. Затем используйте этот контекст, например: context.findViewById (...) или context.getText (...)

Удачи!

+0

Спасибо! Я использую это сейчас: 'public MyMap (Prefs prefs, SupportMapFragment mapFragment) { pref = prefs; mapFrag = mapFragment; } ' – Ikarisan

Смежные вопросы