2011-01-14 7 views
1

간단한 메시지 팝업을 처리하도록 클래스를 만들었으므로 앱 전체에서 코드를 다시 사용할 수 있습니다. 문맥을 제대로 파악할 수없는 것 같습니다. 이것은 모든 곳에서 호출되며 종종 UI가없는 클래스에서 호출됩니다. 아래 라인을 참조하십시오 ...어떻게 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) 
    ... 

여기서 컨텍스트없이 작업을 수행하고 있습니까? 서비스에는 UI가 없지만 컨텍스트가 있습니다.

편집 :

당신은 정적 액세스 및 응용 프로그램이 시작될 때 만든 작은 메시지 서비스를 만들 수 있습니다. 예를 들어 :

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

처음에는 Context가 전달되었지만, 이것을 호출하고 싶은 곳 중 일부는 예를 들어 DBHelper와 같은 클래스이며 UI가 없습니다. –

+0

이 문제를 해결하는 한 가지 방법을 보여주기 위해 내 대답을 편집했습니다. 나는 당신이 당신의 어플리케이션에 적합한 방식으로 그것을 구현하도록 권장 할 것이다; 이것은 단지 예일뿐입니다. 아마도 여기 안드로이드 전문가가 설명 할 수있는 더 좋은 패턴이있을 것입니다. – WorkerThread

+0

WOW는 모든 도움에 감사드립니다. 내가 이것을 읽기 전에 나는 바른 길 위에 있었다. 그러나 정확하게 내가 무엇을하고 있었는지에 관해 명확히하지 않았다! 덕분에이 위대한 작품! –

0

msg 클래스의 생성자에서 Context를 매개 변수로 추가하고이를 사용중인 활동에서 전달하십시오.

+0

를 통해 사용할 수 있을까? public class xtz는 Activity()를 확장합니까? –

관련 문제