从非活动类中获取上下文

时间:2014-08-18 16:58:13

标签: android android-activity alert android-context android-toast

是否可以从非活动类中获取上下文? 没有在活动类中创建一个方法来获取活动?

可能使用新线程或启动一个新的不可见活动来显示Toast,然后再回到Activity。

我的想法是编写一个包含一些通过Toast或Alert显示消息的方法的包。我只需要导入包,例如可以显示Toast。

修改: 也许我应该说我将使用我的应用程序包在后台使用服务,如果我关闭应用程序,应用程序在后台运行并在我调用Toast时崩溃。错误是Nullpointer异常,只有在我关闭应用程序并且服务在后台重新启动时才能从警报中获取。

修改: 码: 这是服务中的方法。服务是类名,如果我关闭服务再次启动服务,则会自动启动。

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
    mT(Services.this,"Service starting");
    A.mA(MyActivity.getAct(),"Title", "Message", R.drawable.ninja,
            new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int which) {
                    mT(Services.this, "Clicked");
                }
            }
            );
    Message msg = mServiceHandler.obtainMessage();
    msg.arg1 = startId;
    mServiceHandler.sendMessage(msg);

    // If we get killed, after returning from here, restart
    return START_STICKY;
}

警报和Toast将通过启动服务显示,但如果我关闭应用程序并且服务在后台再次启动则不会显示。有趣的事情是,如果我删除警报而不是警报,将显示Toast。错误消息为:

08-19 18:37:30.479    4591-4591/productions.ingos.gpstracker E/AndroidRuntime﹕ FATAL EXCEPTION: main
java.lang.RuntimeException: Unable to start service productions.ingos.gpstracker.Services@417322e8 with null: java.lang.NullPointerException
        at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:2553)
        at android.app.ActivityThread.access$2000(ActivityThread.java:134)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1321)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:137)
        at android.app.ActivityThread.main(ActivityThread.java:4867)
        at java.lang.reflect.Method.invokeNative(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:511)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1007)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:774)
        at dalvik.system.NativeStart.main(Native Method)
 Caused by: java.lang.NullPointerException
        at android.app.AlertDialog.resolveDialogTheme(AlertDialog.java:142)
        at android.app.AlertDialog$Builder.<init>(AlertDialog.java:359)
        at ingos.productions.DP.mA(DP.java:29)
        at productions.ingos.gpstracker.Services.onStartCommand(Services.java:117)
        at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:2536)
        at android.app.ActivityThread.access$2000(ActivityThread.java:134)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1321)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:137)
        at android.app.ActivityThread.main(ActivityThread.java:4867)
        at java.lang.reflect.Method.invokeNative(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:511)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1007)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:774)
        at dalvik.system.NativeStart.main(Native Method)

警报和Toast的方法在DP类中:

 public static void mT(Context ct,String str)
    {
        Toast.makeText(ct,str,Toast.LENGTH_SHORT).show();
    }

 public static void mA(Context ct,String title, String message,Integer icon,DialogInterface.OnClickListener Dif)
    {
        AlertDialog alertDialog = new AlertDialog.Builder(ct).create();
        alertDialog.setTitle(title);
        alertDialog.setMessage(message);
        alertDialog.setButton("OK", Dif);
        alertDialog.setIcon(icon);
        alertDialog.show();
    }

2 个答案:

答案 0 :(得分:0)

您可以像当前Toast方法一样传入上下文。 makeText(上下文上下文,字符串值,int持续时间)。初始化时,您也可以将Context传递给您的课程。

如果你走这条路线,

Toast会使用公共静态方法

答案 1 :(得分:0)

如果您的类是片段,那么简单的getActivity()方法将为您提供上下文,如果是一个简单的java类,那么您需要在该类中使用Context的参数创建constructer,该参数可以从初始化它的Activity获取上下文。 / p>