Модераторы: javastic
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Android? новый объект с (context), Создание нового объекта в теле функции 
:(
    Опции темы
MaksSh
Дата 14.7.2011, 12:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 3.1.2007

Репутация: нет
Всего: нет



Добрый день!
На java начал программировать недавно и у меня возник вопрос: как создать в функции класса новый объект содержащий context?
Тоесть имеем класс:

Код


public class Panel extends SurfaceView implements SurfaceHolder.Callback{
    public Panel(Context context) {
        super(context);
 mElement =new Element(context);
    }
}
public void doDraw(long elapsed, Canvas canvas) {
        // TODO Auto-generated method stub
        canvas.drawColor(Color.BLUE);
        drawScreen(canvas);
        mElement.update(elapsed, canvas);  
       if(bTimer == true){
         mElement.animation();
         if(mElement.bFin){
                ScreenFiled();
               createElement();
         }
         bTimer = false;
        };
private void createElement(){
        Context mContext;
        mContext = this.getContext();
        mElement = new Element(mContext); ???????
    }
}

вопрос, как создать новый объект в функции createElement().

при отладке заглядывал в переменную context, в конструкторе и в функции она одинаковая
функцию createElement() вызываю в из функции onDraw() может проблема в этом так как в других функциях функция  createElement()  работает нормально.
PM MAIL WWW ICQ Skype   Вверх
AntonSaburov
Дата 14.7.2011, 13:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Штурман
****


Профиль
Группа: Модератор
Сообщений: 5658
Регистрация: 2.7.2002
Где: Санкт-Петербург

Репутация: нет
Всего: 118



Так что за проблема ? Вернуть объект из createElement ?
А такое не подойдет ?

Код

private Element createElement(){
        Context mContext;
        mContext = this.getContext();
        mElement = new Element(mContext); ???????
        return mElement;
}

PM MAIL WWW ICQ   Вверх
MaksSh
Дата 14.7.2011, 14:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 3.1.2007

Репутация: нет
Всего: нет



проблема в том что приложение валится на сроке 
Код

mElement = new Element(mContext); ???????

и соответственно указывает на строку в конструкторе класса Element
Код

public class Element extends SurfaceView{
    public Element(Context context) {
        super(context); ????????????????????

тоесть какие то проблемы с переменной context. В чём проблема я непойму.

Пытался в этой функции создать Teast 
Код

Context mContext;
        mContext = this.getContext();
        int duration = Toast.LENGTH_SHORT;

        toast = Toast.makeText(mContext, text, duration);

та же история.

Это сообщение отредактировал(а) MaksSh - 14.7.2011, 14:31
PM MAIL WWW ICQ Skype   Вверх
AntonSaburov
Дата 14.7.2011, 15:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Штурман
****


Профиль
Группа: Модератор
Сообщений: 5658
Регистрация: 2.7.2002
Где: Санкт-Петербург

Репутация: нет
Всего: 118



А с каким сообщением валиться ? Мы же не экстрасенсы, чтобы догадываться. Ты о том, что валиться даже не написал.
Давай подробности - а то так можно долго воду в ступе толочь.
PM MAIL WWW ICQ   Вверх
MaksSh
Дата 14.7.2011, 18:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 3.1.2007

Репутация: нет
Всего: нет



в конструкторе класса Panel создаём объект класса Element 
Код

public class Panel extends SurfaceView implements SurfaceHolder.Callback{
public Panel(Context context) {
        super(context);

            mElement =new Element(context);
   }
}

в функции onDrawего обновляем, всё как положено
Код

public void doDraw(long elapsed, Canvas canvas) {
        // TODO Auto-generated method stub
        canvas.drawColor(Color.BLUE);
        drawScreen(canvas);
        mElement.update(elapsed, canvas);  

потом я создаю новый объект класса Element 
Код

private void createElement(){
        Context mContext;
        mContext = this.getContext();
        mElement = new Element(mContext);
    }

вот тут то и начинается свистопляска, отладчик показывает что проблемы в строке mElement = new Element(mContext);
и если капнуть глубже в строке super(context);
Код

public Element(Context context) {
        super(context);


в отладчике заглянул в переменную context вроде всё нормально.
могу выложить весь код класса Panel.


Это сообщение отредактировал(а) MaksSh - 14.7.2011, 18:16
PM MAIL WWW ICQ Skype   Вверх
spyswamp
Дата 15.7.2011, 10:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 349
Регистрация: 18.8.2006

Репутация: 4
Всего: 7



Во-первых, зачем ты создаешь еще один такой же элемент?
Во-вторых, почитай про обработку исключений - 99% вопросов отпадет сразу.


--------------------
- why you call it beta?
- cuz it's betta then nothin'
PM MAIL   Вверх
MaksSh
Дата 15.7.2011, 11:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 3.1.2007

Репутация: нет
Всего: нет



spyswamp
Где почитать, кинь , пожалуйста, ссылку.
Спасибо, не надо нашел.

Это сообщение отредактировал(а) MaksSh - 15.7.2011, 11:38
PM MAIL WWW ICQ Skype   Вверх
ivanovpv
  Дата 18.7.2011, 07:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Варвар
**


Профиль
Группа: Участник
Сообщений: 639
Регистрация: 26.1.2005
Где: Москва

Репутация: 9
Всего: 28



Цитата

тоесть какие то проблемы с переменной context. В чём проблема я непойму.


Эээ ребята вы чего? Переменные типа Context/Activity не стоит держать в членах класса - ну или по крайней мере это надо делать очень осторожно! Это чревато утечками памяти. Пруфлинк фтыкать сюда

Если вкратце, то памятка такая:

Код

In summary, to avoid context-related memory leaks, remember the following:

•Do not keep long-lived references to a context-activity (a reference to an activity should have the same life cycle as the activity itself)
•Try using the context-application instead of a context-activity
•Avoid non-static inner classes in an activity if you don't control their life cycle, use a static inner class and make a weak reference to the activity inside. The solution to this issue is to use a static inner class with a WeakReference to the outer class, as done in ViewRoot and its W inner class for instance
•A garbage collector is not an insurance against memory leaks


Это сообщение отредактировал(а) ivanovpv - 18.7.2011, 07:39


--------------------
Aut viam inveniam aut faciam
PM MAIL Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Android | Следующая тема »


 




[ Время генерации скрипта: 0.0750 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.