2012-03-15 2 views
12

Я пытаюсь обрабатывать исключения в своем приложении. Я пытаюсь зарегистрировать исключение, а затем использовать Toast, чтобы предупредить пользователя о возникшей проблеме. У меня есть эта рабочая находка во всех моих классах, которые расширяют Activity.Android-контекст за пределами класса активности

Однако в любом классе, который не увеличил активность, я не могу использовать метод тоста, поскольку я не могу получить текущий контекст. Есть ли простой способ обойти это или все действия класса моего класса?

+0

В частности, что другие структуры, вы работаете с ? Многие из них либо уже имеют контекст, либо получают контекст, переданный им в какой-то момент. – FoamyGuy

+0

Вы можете сделать контекст полем-членом и установить в конструкторе. Но это может привести к утечкам памяти, поэтому используйте с осторожностью (избегайте статических ссылок на Context). – j0ntech

+0

У меня есть два класса: 1) RegistrationScreen, который расширяет Activity. 2) SocketClient, который не расширяет Activity. Когда пользователь отправляет форму в RegistrationScreen, он создает новый объект SocketClient, который регистрируется через соединение сокета (бит, который генерирует исключение IOException). В случае успеха SocketClient возвращает значения классу RegistrationScreen, но его, когда он не удается, я боюсь. Должен ли я просто сделать SocketClient бросить исключения и поймать их в RegistrationScreen? – Joseph

ответ

15

Вы просто передать контекст При вызове Non-Activity класс от класса активности вызова Как

YourNonActivtyClass obj = new YourNonActivtyClass(Activity.this); 
+1

Спасибо. Одна проблема, однако, при использовании вышеизложенного я получаю «Без экземпляра экземпляра типа« Активность »доступно в области видимости». Это изнутри класса, который расширяет Activity. – Joseph

+0

Прежде всего класс активности андроида - это вызов, а затем вы можете вызывать любой класс wihout Activity, поэтому нет никакой проблемы в вышеприведенном коде для меня .... –

+0

Не является ли контекст очень ТЯЖЕЛЫМ объектом, чтобы быть таким? – Wooff

-13

сообщений Toast должны работать в контексте приложения, т.е.

Toast.makeText(getApplicationContext(), ...); 
+2

Если он не находится внутри активности, тогда не может быть метода getApplicationContext(). Кроме того, нет необходимости использовать этот метод. Сам объект активности является контекстом. Таким образом, использование YourActivityName.this будет работать отлично, а не getApplicationContext(); – FoamyGuy

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