Форум программистов, компьютерный форум, киберфорум
Наши страницы

Программирование Android

Войти
Регистрация
Восстановить пароль
 
 
SkN[i]lpl[e][r]
3 / 3 / 0
Регистрация: 12.05.2011
Сообщений: 248
#1

Обращение к функции находящейся не в MainActivity - Программирование Android

29.03.2015, 18:16. Просмотров 1255. Ответов 26
Метки нет (Все метки)

Доброго времени суток! Имеется MainActivity.java и HybridMap.java. Мне необходимо при нажатии кнопки обратиться к процедуре в HybridMap. Процедура никакие данные не возвращает, просто нужно выполнение. Пробовал обращаться так:
Java
1
2
3
4
5
6
7
8
9
10
private HybridMap hbr;
//далее уже в обработчке нажатия кнопки
 imgBtn  = (ImageButton) findViewById(R.id.image_button);
        OnClickListener oclBtnIMG = new OnClickListener() {
            @Override
            public void onClick(View v) {
               hbr.dostoprLayers();
            }
        };
        imgBtn.setOnClickListener(oclBtnIMG);
Но при нажатии на кнопку происходит крах программы и ошибка с указанием этой строки. Помогите разобраться как правильно обратиться к этой функции...
Вот класс и моя функция в HybridMap.java:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
public class HybridMap extends FrameLayout implements MapViewConstants {
//
//здесь обьявление различных переменных и констант
//
public HybridMap(Context context, AttributeSet attrs) {
        super(context, attrs);
//здесь  загрузка карты и ее настройка
}
 
public  void dostoprLayers(){
      GeoPoint point2 = new GeoPoint(gps.getLatitude(), gps.getLongitude());
 
      ArrayList<OverlayItem> items = new ArrayList<OverlayItem>();
    
      OverlayItem olItem2 = new OverlayItem("Here", "SampleDescription", point2);
      Drawable newMarker2 = this.getResources().getDrawable(R.drawable.flag_green);
      olItem2.setMarker(newMarker2);
      items.add(olItem2);
     
      this.mMyLocationOverlay = new ItemizedIconOverlay<OverlayItem>(items,
              new ItemizedIconOverlay.OnItemGestureListener<OverlayItem>() {
                  @Override
                  public boolean onItemSingleTapUp(final int index,
                                                   final OverlayItem item) {
                    
                      mv.getOverlays().remove(mMyLocationOverlay);
                      mv.invalidate();
 
                      return true; 
                  }
 
                  @Override
                  public boolean onItemLongPress(final int index,
                                                 final OverlayItem item) {
                     
                      return false;
                  }
              }, resourceProxy);
      this.mv.getOverlays().add(this.mMyLocationOverlay);
      mv.invalidate();
  }
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.03.2015, 18:16
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Обращение к функции находящейся не в MainActivity (Программирование Android):

Обращение к textView из другого класса (не MainActivity) в AndroidStudio - Программирование Android
Добрый вечер, у меня такой вопрос. В MainActivity можно обращаться к объектам, а если в другом классе требуется, допустим, найти объект...

Не отрабатывает MainActivity - Программирование Android
Здравствуйте! В общем, в моем приложении есть два Frament и Main Activity. В Main Activity прописано меню Navigation Drawer, а фрагменты...

MainActivity AsyncTask - Программирование Android
Добрый вечер. Ребята тут небольшая проблема. Мне нужно Заполнить NavigatorDrawer (из базы). Почему когда я пытаюсь в...

Не создается MainActivity.java - Программирование Android
Подскажите почему не создается форма по умолчанию?

Доступ к полям MainActivity - Программирование Android
Добрый день, что-то не могу сообразить, как получить доступ к полям MainActivity из другого класса ? обычно доступ к полям через объект...

Переделать MainActivity в Fragment - Программирование Android
Всем добра, друзья. Подскажите. Приложение работает со сторонним SDK. Создал проект Navigation Drawer Activity. Не могу найти, как...

26
dajver
409 / 273 / 18
Регистрация: 18.09.2010
Сообщений: 1,112
30.03.2015, 12:13 #16
создайте просто ниже вашего конструктора
Java
1
2
3
4
public HybridMap(Context context, AttributeSet attrs) {
        super(context, attrs);
//здесь  загрузка карты и ее настройка
}
еще один конструктор
Java
1
2
3
public HybridMap(Context context) {
        super(context);
}
и не будет выдавать ошибку
0
SkN[i]lpl[e][r]
3 / 3 / 0
Регистрация: 12.05.2011
Сообщений: 248
30.03.2015, 12:33  [ТС] #17
Цитата Сообщение от dajver Посмотреть сообщение
создайте просто ниже вашего конструктора

Java
1
2
3
4
public HybridMap(Context context, AttributeSet attrs) {
 super(context, attrs);
//здесь *загрузка карты и ее настройка
}
еще один конструктор

Java
1
2
3
public HybridMap(Context context) {
 super(context);
}
и не будет выдавать ошибку
если не вызывать функцию dostoprLayers(); из MainActivity то ошибок нет и все отлично работает, но стоит сделать запрос:
Java
1
2
3
4
5
6
7
8
9
10
11
 HybridMap hbr = new HybridMap(context);    //<----------------------
 imgBtn  = (ImageButton) findViewById(R.id.image_button);
 
        OnClickListener oclBtnIMG = new OnClickListener() {
            @Override
            public void onClick(View v) {
hbr.dostoprLayers();     //<-----------
            }
        };
        imgBtn.setOnClickListener(oclBtnIMG);
    }
то крах программы еще до запуска. В логах ссылается на
Java
1
2
3
 public HybridMap(Context context) {
        super(context);  // выделяет эту строку
    }
Java
1
HybridMap hbr = new HybridMap(context);// и вот эту строку выделяет
0
YuraAAA
1577 / 1318 / 271
Регистрация: 25.10.2009
Сообщений: 3,438
Записей в блоге: 2
30.03.2015, 12:41 #18
SkN[i]lpl[e][r], покажите логи краша
0
dajver
409 / 273 / 18
Регистрация: 18.09.2010
Сообщений: 1,112
30.03.2015, 12:44 #19
а какая хоть ошибка?
0
SkN[i]lpl[e][r]
3 / 3 / 0
Регистрация: 12.05.2011
Сообщений: 248
30.03.2015, 12:47  [ТС] #20
YuraAAA,
03-30 09:26:07.922 1902-1902/com.моя_прога E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: com.моя_прога, PID: 1902
java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.моя_прога/com.моя_прога.MainActivity}: java.lang.NullPointerException
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2110)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2233)
at android.app.ActivityThread.access$800(ActivityThread.java:135)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5001)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.NullPointerException
at android.view.ViewConfiguration.get(ViewConfiguration.java:352)
at android.view.View.<init>(View.java:3448)
at android.view.ViewGroup.<init>(ViewGroup.java:459)
at android.widget.FrameLayout.<init>(FrameLayout.java:93)
at com.моя_прога.HybridMap.<init>(HybridMap.java:310)
at com.моя_прога.MainActivity.<init>(MainActivity.java:290)
at java.lang.Class.newInstanceImpl(Native Method)
at java.lang.Class.newInstance(Class.java:1208)
at android.app.Instrumentation.newActivity(Instrumentation.java:1061)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2101)
************at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2233)
************at android.app.ActivityThread.access$800(ActivityThread.java:135)
************at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)
************at android.os.Handler.dispatchMessage(Handler.java:102)
************at android.os.Looper.loop(Looper.java:136)
************at android.app.ActivityThread.main(ActivityThread.java:5001)
************at java.lang.reflect.Method.invokeNative(Native Method)
************at java.lang.reflect.Method.invoke(Method.java:515)
************at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
************at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
************at dalvik.system.NativeStart.main(Native Method)
0
dajver
409 / 273 / 18
Регистрация: 18.09.2010
Сообщений: 1,112
30.03.2015, 12:51 #21
Может у вас context == null? Пишите лучше вместо него MainActivity.this
0
SkN[i]lpl[e][r]
3 / 3 / 0
Регистрация: 12.05.2011
Сообщений: 248
30.03.2015, 15:31  [ТС] #22
dajver, безрезультатно, точно такая же ошибка, и те же строки выделяет

Добавлено через 37 минут
я так понял что context == nul, я проверил на условии его, но MainActivity.this точно не null. Но однако всеравно ошибка...

Добавлено через 37 минут
попробовал сделать такую штуку: создал под
Java
1
2
3
4
public HybridMap(Context context, AttributeSet attrs) {
        super(context, attrs);
//здесь  загрузка карты и ее настройка
}
еще однин конструктор, как мне и советовали
Java
1
2
3
public HybridMap(Context context) {
        super(context);
}
и весь програмный код (загрузка карты и работа с ней) который был в верхнем конструкторе я переместил в этот. и запустил... Ошибок не выдало, да и при нажатии на кнопку не вылетало. Но карта совсем не отобразилась, как будто MapView не создался, просто черный экран и поверх кнопка.

Добавлено через 1 час 19 минут
Как оказалось нельзя объявлять конструктор одноименный основному. Нужно работать с конструктором с двумя параметрами, который объявлен изначально. Проблема все та же:
Java
1
HybridMap hbr = new HybridMap(MainActivity.this, какойто атрибут)
какой сюда атрибут ставить?...
0
Spelcrawler
527 / 497 / 111
Регистрация: 12.03.2014
Сообщений: 1,654
Завершенные тесты: 1
30.03.2015, 16:33 #23
SkN[i]lpl[e][r], то есть у вас есть в xml элемент - HybridMap? И вы хотите его в коде использовать? И создаете новый объект HybridMap уже в коде? Уже догадались что не так?
0
SkN[i]lpl[e][r]
3 / 3 / 0
Регистрация: 12.05.2011
Сообщений: 248
30.03.2015, 16:48  [ТС] #24
Spelcrawler, ну почти догадываюсь да в main.xml есть этот элемент. Получается поверх старого создается новый? но как это исправить тогда?...
0
androbro
326 / 287 / 61
Регистрация: 17.10.2014
Сообщений: 856
30.03.2015, 16:53 #25
SkN[i]lpl[e][r],
Цитата Сообщение от SkN[i]lpl[e][r] Посмотреть сообщение
Получается поверх старого создается новый?
Цитата Сообщение от SkN[i]lpl[e][r] Посмотреть сообщение
но как это исправить тогда?...
ну очевидно же, надо сверху еще и третий создать
0
Spelcrawler
527 / 497 / 111
Регистрация: 12.03.2014
Сообщений: 1,654
Завершенные тесты: 1
30.03.2015, 16:55 #26
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от SkN[i]lpl[e][r] Посмотреть сообщение
Получается поверх старого создается новый? но как это исправить тогда?...
Нет! Получается, что это два разных элемента. Вам нужно в xml назначить id элементу, а в коде найти его по id.
XML
1
android:id="@+id/myMap"
Java
1
HybridMap myMap = (HybridMap) findViewById(R.id.myMap);
После этого у вас будет доступ из кода к элементу в xml.
2
SkN[i]lpl[e][r]
3 / 3 / 0
Регистрация: 12.05.2011
Сообщений: 248
30.03.2015, 17:01  [ТС] #27
Урааа!!!!!!!! Заработало!!!!!!!!!
Spelcrawler, красавчик!!! Спасибо огромное!!! 2 дня мучился!!!

Добавлено через 56 секунд
Все отлично работает теперь!)
0
30.03.2015, 17:01
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.03.2015, 17:01
Привет! Вот еще темы с ответами:

Notification - запуск MainActivity - Программирование Android
Здравствуйте! Есть Service который посылает запрос, парсит страницу и выводит notification. При нажатии на него открывается моя...

SplashScreen не дает запуститься MainActivity - Программирование Android
Здравствуйте!Есть предзагрузочная анимация в приложении и при запуске на эмуляторе все идет гладко. Решил запустить на телефоне,но тут...

Как получить context MainActivity в Service? - Программирование Android
В MainActivity создаю сервис и startService( SER );, как получить context MainActivity в сервисе, чтобы можно было манипулировать view?

Как запустить метод Fragment из MainActivity? - Программирование Android
есть фрагмент с картой, в нем метод: public void Sputnik(GoogleMap map) { ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
27
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru