2017-09-15 139 views
-1

早上好!Android:由Handler造成的java.lang.RuntimeException

我有一個Android應用程序在谷歌播放存儲與小部件,從服務器加載一些數據。 在我的遊戲控制檯我得到以下異常:

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」開頭的連接,並從服務器獲取的DATAS。 「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:

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); 

處理程序初始化如何可以拋出一個runtime_exception(方法fehler(String, Context)內)?

我已經搜索了很長時間,但我沒有找到有關這方面的信息。

感謝您的所有答案!

回答

2

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被扔。

+0

這就是解決方案,謝謝!我將類定義爲全局對象後的「Handler handler = new Handler()」稱爲「全局對象」。這避免了例外。 – Waldi