【问题标题】:Android, pop up a message on exceptionAndroid,弹出异常消息
【发布时间】:2014-11-02 15:08:53
【问题描述】:

我有一个连接到 servlet 的 android 应用程序。如果 servlet 关闭(昨天发生在我身上),应用程序就会崩溃。我需要向用户弹出一条消息,告知一些连接问题,然后终止应用程序。

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

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

还有其他方法可以做到这一点吗?在此先感谢 ilias

【问题讨论】:

    标签: android exception


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      您的AsyncTask 正在后台线程中运行。必须在主 (UI) 线程上调用以显示 ToastDialog。要在 AsyncTask 中执行此操作,您可以执行以下操作:

      您需要在您的 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;
          ...
      }
      

      当您想要显示 Dialog 或 Toast 时,请确保代码在主 (UI) 线程上运行:

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

      【讨论】:

      • 我不应该在 AsyncTask 上调用 toast,或者我不能!?我想出了另一种方式,异步任务正在返回一个字符串。在catch中我返回了一个值-1,所以在执行后我检查它是否为-1然后弹出消息
      猜你喜欢
      • 2011-06-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-28
      • 2013-11-15
      • 1970-01-01
      相关资源
      最近更新 更多