非活动类中的警报对话框

时间:2012-10-15 07:22:06

标签: android

我有一个代码,用于检查某些数据并在非活动类中显示警报。但是在运行应用程序时崩溃并且没有显示警报对话框。我用下面的代码......

if( str.isEmpty() || strPort.isEmpty()){
        new AlertDialog.Builder(Mtx.getContext())
                    .setMessage("Please provide a valid String")
        .setTitle("HAT Alert !!!")
        .setCancelable(true)
        .setPositiveButton("OK", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int whichButton){
                return;
            }
        }).show();

Mtx.getContent()方法的代码

public class Mtx extends Application {
public static Context context;

@Override
public void onCreate(){
   super.onCreate();
   Mtx.context = getApplicationContext();
}

public static Context getContext(){
       return Mtx.context;
}
}
日志cat中显示

错误消息

10-15 12:50:33.708: E/global(329): Deprecated Thread methods are not supported.
10-15 12:50:33.708: E/global(329): java.lang.UnsupportedOperationException
10-15 12:50:33.708: E/global(329):  at java.lang.VMThread.stop(VMThread.java:85)
10-15 12:50:33.708: E/global(329):  at java.lang.Thread.stop(Thread.java:1280)
10-15 12:50:33.708: E/global(329):  at java.lang.Thread.stop(Thread.java:1247)
10-15 12:50:33.708: E/global(329):  at mediatronix.HAT.Splash$1.run(Splash.java:36)

请纠正我

感谢

4 个答案:

答案 0 :(得分:2)

您确定,对话框是问题吗?您Splash.java文件第36行的内容是什么?因为根据堆栈跟踪,存在问题。

答案 1 :(得分:2)

您只是无法使用应用程序的上下文显示AlertDialog。对话框应该使用其上下文附加到活动的窗口,并在其生命周期内保持活跃。因此,您只需提供一个活动的上下文,然后就可以显示一个对话框。

作为替代方案,我建议您在 AndroidManifest.xml 中使用Activity显示android:theme="@android:style/Theme.Dialog"为主题的对话框。这将用于操纵对话框,但实际上它将是一个活动。作为优势,只要您可以访问应用程序的上下文,就可以在代码中的任何位置启动活动。

有关详细信息,请阅读this answer。

答案 2 :(得分:2)

在Activity中创建Non Activity类时,将上下文传递给其构造函数:

NonActivityClass nonActivityClass = new  NonActivityClass(this);

非活动构造函数:

Context mContext;
public NonActivityClass(Context context){
    mContext = context;
}

然后使用:

非活动课程中的

new AlertDialog.Builder(mContext)...

答案 3 :(得分:1)

我猜你的上下文是空的......

在开始检查数据之前,你不能发送上下文到“检查某些数据的代码”,而不是尝试获取不存在的上下文吗?

否则,创建一个使用alertdialog的活动,然后从“服务”类启动该活动。