Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/194.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android,在异常时弹出一条消息_Android_Exception - Fatal编程技术网

Android,在异常时弹出一条消息

Android,在异常时弹出一条消息,android,exception,Android,Exception,我有一个android应用程序连接到servlet。如果servlet昨天发生故障,应用程序就会崩溃。我需要弹出一条消息通知用户一些连接问题,然后终止应用程序 在onCreate方法上,我调用了一个AsyncTask类,在该类中,与服务器的第一次连接完成。我有一个try/catchUnknownHostException e块,如果sevlet关闭,它将被激活。 问题是我无法在那里创建弹出消息。我尝试了toast和AllertDialogs,但都返回了一个异常 Java.lang.Runtime

我有一个android应用程序连接到servlet。如果servlet昨天发生故障,应用程序就会崩溃。我需要弹出一条消息通知用户一些连接问题,然后终止应用程序

在onCreate方法上,我调用了一个AsyncTask类,在该类中,与服务器的第一次连接完成。我有一个try/catchUnknownHostException e块,如果sevlet关闭,它将被激活。 问题是我无法在那里创建弹出消息。我尝试了toast和AllertDialogs,但都返回了一个异常

Java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()

还有别的办法吗?提前感谢,ilias

您可以设置一个布尔值,并在函数调用后读取它,此时您应该能够显示toast/对话框。但是如果没有剩下的代码,这很难说。

您的异步任务是在后台线程中运行的。必须在主UI线程上调用以显示Toast或对话框。要在异步任务中执行此操作,可以执行以下操作:

您的AsyncTask中需要一个活动上下文,因此让您的活动按如下方式创建AsyncTask:

MyAsyncTask task = new MyAsyncTask(this, ...); // pass "this" so AsyncTask has an activity context
在AsyncTask构造函数中,保存活动上下文,以便以后使用:

private Activity activity;

// Constructor
MyAsyncTask(Activity activity, ...) {
    this.activity = activity;
    ...
}
如果要显示对话框或Toast,请确保代码在主UI线程上运行:

// Here we want to Toast
activity.runOnUiThread(new Runnable() {
        @Override
        public void run() {
            // Do your Toast or Dialog stuff in here
            ...        
        }
 });

我不应该在这个任务上叫toast,否则我就不能!?我想到了另一种方法,asynctask返回一个字符串。在catch中,我返回了一个值-1,所以在postexecute中,我检查它是否为-1,然后弹出消息