2011-01-14 3 views
1

Я создал класс для обработки простого всплывающего окна, чтобы я мог повторно использовать код в приложении. Кажется, я не могу правильно понять контекст. Это называется по всему месту и часто из классов, у которых нет пользовательского интерфейса. См. Строку ниже ...Как вы указываете CONTEXT

public class msg { 

    public void msghand(String message, Exception e) { 
    { 

     String s; 

     if (e != null) 
     { 
      s= message + "\n" + e.getLocalizedMessage() + " " + e.toString(); 
     } 
     else 
     { 
      s= message ; 
     } 

     new AlertDialog.Builder( getApplicationContext()) <<<< HERE IS THE PROBLEM 
     .setMessage(s) 

     .setPositiveButton("OK", new DialogInterface.OnClickListener() { 

      public void onClick(DialogInterface dialog, int whichButton) { 
      } 
     }) 
     .create() 
     .show(); 


    } 

    } 
} 

ответ

2

Возможно ли передать контекст в качестве параметра?

public void msghand(String message, Exception e, Context context) { 
    ... 
    new AlertDialog.Builder(context) 
    ... 

Где вы работаете без контекста? У служб нет пользовательского интерфейса, но у них есть контекст.

Edit:

Вы можете создать небольшую службу сообщений, которая статический доступна, и созданную при запуске вашего приложения. Например:

class MyActivity extends Activity 
{ 
    public void onCreate(Bundle savedInstanceState) 
    { 
     // create the Message service that can be statically accessed 
     s_MessageService = new MessageService(getApplicationContext()); 
     ... 
    } 

    public static MessageService getApplicationMessageService() 
    { 
     return s_MessageService; 
    } 

    private static MessageService s_MessageService; 
} 

Где MessageService осуществляется надлежащим образом

class MessageService 
{ 
    public MessageService(Context messageContext) 
    { 
     m_MyContext = messageContext; 
    } 

    public msghand(String message, Exception e) 
    { 
     // exactly the same as before, except using the stored context 
    } 

    Context m_MyContext = null; 
} 

Ваш класс DBHelper может использовать его через

MyActivity.getApplicationMessageService().msghand(...); 
+0

У меня сначала был контекст, но некоторые из мест, которые я хотел назвать, это просто классы, например, DBHelper и не имеют пользовательского интерфейса. –

+0

Я отредактировал свой ответ, чтобы показать один из способов решения этой проблемы. Я бы рекомендовал вам реализовать его таким образом, который имеет смысл для вашего приложения; это просто пример. Есть, возможно, лучшие шаблоны, которые могли бы объяснить гуру Android. – WorkerThread

+0

WOW благодарю вас за помощь. Я был на правильном пути, прежде чем я прочитал это, но не был уверен, что именно я делаю! спасибо, это отлично работает! –

0

Добавить Контекст как параметр в конструкторе класса msg и передать его из любой активности, использующей его.

+0

ли это быть "активность" сама по себе? Как открытый класс xtz расширяет Activity()? –

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