我有一个代码,用于检查某些数据并在非活动类中显示警报。但是在运行应用程序时崩溃并且没有显示警报对话框。我用下面的代码......
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)
请纠正我
感谢
答案 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的活动,然后从“服务”类启动该活动。