【问题标题】:Android: java.lang.RuntimeException caused by HandlerAndroid:Handler引起的java.lang.RuntimeException
【发布时间】:2017-09-15 11:53:24
【问题描述】:

早安!

我在 google play 商店中有一个 android 应用程序,它带有一个从服务器加载一些数据的小部件。 在我的 Play-Console 中,出现以下异常:

java.lang.RuntimeException: 


  at android.os.AsyncTask$3.done (AsyncTask.java:318)

  at java.util.concurrent.FutureTask.finishCompletion (FutureTask.java:354)

  at java.util.concurrent.FutureTask.setException (FutureTask.java:223)

  at java.util.concurrent.FutureTask.run (FutureTask.java:242)

  at android.os.AsyncTask$SerialExecutor$1.run (AsyncTask.java:243)

  at java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1133)

  at java.util.concurrent.ThreadPoolExecutor$Worker.run (ThreadPoolExecutor.java:607)

  at java.lang.Thread.run (Thread.java:762)


Caused by: java.lang.RuntimeException: 

  at android.os.Handler.<init> (Handler.java:200)

  at android.os.Handler.<init> (Handler.java:114)

  at package.Widget.fehler (Widget.java:279)

  at package.Widget_Server.doInBackground (Widget_Server.java:73)

  at package.Widget_Server.doInBackground (Widget_Server.java:19)

  at android.os.AsyncTask$2.call (AsyncTask.java:304)

  at java.util.concurrent.FutureTask.run (FutureTask.java:237)

Java 类“Widget_Server.java”启动连接并从服务器获取数据。 “Widget.java”是 Widget 的 Main_class。

Widget_Server.java,第 73 行:

finally {
     try {
        reader.close();
     } catch(Exception ex) {
               EXCEPTION (line 73) -> widget.fehler("Fehler! #2215", context);
     }
}

Widget.java,第 279 行:(在方法 fehler(String, Context) 内)

remoteViews.setTextViewText(R.id.label4, fehlerbeschreibung);

   EXCEPTION (line 279) -> Handler handler = new Handler();
   handler.postDelayed(new Runnable() {
      public void run() {
           remoteViews.setViewVisibility(R.id.loading, View. INVISIBLE);
           update(context);
      }
   }, 1000);

Handler 初始化如何抛出 runtime_exception?

我已经搜索了很长时间,但我没有找到相关信息。

感谢所有回答!

【问题讨论】:

    标签: java android handler runnable android-handler


    【解决方案1】:

    Handler handler = new Handler()实际上在构造函数下面调用。

    public Handler(Callback callback, boolean async) {
        mLooper = Looper.myLooper();
        if (mLooper == null) {
            throw new RuntimeException(
                "Can't create handler inside thread that has not called Looper.prepare()");
        }
        mQueue = mLooper.mQueue;
        mCallback = callback;
        mAsynchronous = async;
    }
    

    如你所见,如果Looper.prepare() 没有被调用,RuntimeException 就会被抛出。

    【讨论】:

    • 这就是解决方案,谢谢!在将类定义为全局对象之后,我将“Handler handler = new Handler()”称为“Handler handler = new Handler()”。这样可以避免异常。
    猜你喜欢
    • 2023-04-09
    • 2019-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多