你如何指定一个上下文

时间:2011-01-14 19:14:33

标签: android android-context

我创建了一个类来处理一个简单的消息弹出窗口,这样我就可以在整个应用程序中重用代码。我似乎无法正确地获得上下文。这是从所有地方调用的,通常来自没有直接UI的类。见下面的行......

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 个答案:

答案 0 :(得分:2)

您是否可以将Context in作为参数传递?

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(...);

答案 1 :(得分:0)

在类msg的构造函数中将Context作为参数添加,并从使用它的任何活动中传入。