Can't toast on a thread that has not called Looper.prepare()

前言

最近一段時間在忙著開發(fā)一款自己的APP,將自己常用的功能需求都加入進入,同時在GitHub上跟著大牛們學習新的技術(shù)检痰,提升自己的技能,在開發(fā)的過程中不斷的發(fā)現(xiàn)問題和解決問題锨推。
在開發(fā)過程遇到了這樣一個問題:Can't toast on a thread that has not called Looper.prepare()铅歼,如果在一個線程中沒有調(diào)用Looper.prepare(),就不能在該線程中創(chuàng)建Toast。這個問題是因為在子線程中彈出Toast導致的换可。
Android是不能直接在子線程中彈出Toast的椎椰,可是如果我們非要這么做,那該怎么辦呢沾鳄?下面就為大家講解如何在子線程中彈出Toast慨飘,以及一些其他類似的子線程中操作的錯誤。

本博客同步發(fā)布于XueLong的博客

在子線程中調(diào)用Toast

在子線程中彈出Toast译荞,會報錯:java.lang.RuntimeException: Can't toast on a thread that has not called Looper.prepare()瓤的。

解決方式:先調(diào)用Looper.prepare();再調(diào)用Toast.makeText().show();最后再調(diào)用Looper.loop();

public class ToastUtils {
    static Toast toast = null;
    public static void show(Context context, String text) {
        try {
            if(toast!=null){
                toast.setText(text);
            }else{
                toast= Toast.makeText(context, text, Toast.LENGTH_SHORT);
            }
            toast.show();
        } catch (Exception e) {
            //解決在子線程中調(diào)用Toast的異常情況處理
            Looper.prepare();
            Toast.makeText(context, text, Toast.LENGTH_SHORT).show();
            Looper.loop();
        }
    }
}

在子線程中更新UI

在子線程中更新UI,會報錯:android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.

解決方式:在子線程中更新UI吞歼,一般使用Handler或者runOnUiThread()或者AsyncTask圈膏。

在子線程中創(chuàng)建Handler

在子線程中創(chuàng)建Handler,會報錯:java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()篙骡。

解決方式:

new Thread() {
  public void run() {
    Looper.prepare();
    new Handler().post(runnable);//在子線程中直接去new 一個handler
    Looper.loop();    //這種情況下稽坤,Runnable對象是運行在子線程中的丈甸,可以進行聯(lián)網(wǎng)操作,但是不能更新UI
  }
}.start();

寫在最后

以上就是在子線程中更新UI尿褪、彈出Toast睦擂、創(chuàng)建Handler時會遇到的問題,及解決方式杖玲。

如果你在參考過程中遇到問題顿仇,可以在我的聯(lián)系方式中給我提問。

后面會繼續(xù)介紹摆马,Android的相關(guān)知識夺欲,歡迎繼續(xù)關(guān)注我博客的更新。

參考資源

轉(zhuǎn)載請注明:XueLong的博客 ? Can't toast on a thread that has not called Looper.prepare()

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末些阅,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子斑唬,更是在濱河造成了極大的恐慌市埋,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,482評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件恕刘,死亡現(xiàn)場離奇詭異缤谎,居然都是意外死亡,警方通過查閱死者的電腦和手機褐着,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,377評論 2 382
  • 文/潘曉璐 我一進店門坷澡,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人含蓉,你說我怎么就攤上這事频敛。” “怎么了馅扣?”我有些...
    開封第一講書人閱讀 152,762評論 0 342
  • 文/不壞的土叔 我叫張陵斟赚,是天一觀的道長。 經(jīng)常有香客問我差油,道長拗军,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,273評論 1 279
  • 正文 為了忘掉前任蓄喇,我火速辦了婚禮发侵,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘妆偏。我一直安慰自己刃鳄,他們只是感情好,可當我...
    茶點故事閱讀 64,289評論 5 373
  • 文/花漫 我一把揭開白布楼眷。 她就那樣靜靜地躺著铲汪,像睡著了一般。 火紅的嫁衣襯著肌膚如雪罐柳。 梳的紋絲不亂的頭發(fā)上掌腰,一...
    開封第一講書人閱讀 49,046評論 1 285
  • 那天,我揣著相機與錄音张吉,去河邊找鬼齿梁。 笑死,一個胖子當著我的面吹牛肮蛹,可吹牛的內(nèi)容都是我干的勺择。 我是一名探鬼主播,決...
    沈念sama閱讀 38,351評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼伦忠,長吁一口氣:“原來是場噩夢啊……” “哼省核!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起昆码,我...
    開封第一講書人閱讀 36,988評論 0 259
  • 序言:老撾萬榮一對情侶失蹤气忠,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后赋咽,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體旧噪,經(jīng)...
    沈念sama閱讀 43,476評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,948評論 2 324
  • 正文 我和宋清朗相戀三年脓匿,在試婚紗的時候發(fā)現(xiàn)自己被綠了淘钟。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,064評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡陪毡,死狀恐怖米母,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情毡琉,我是刑警寧澤爱咬,帶...
    沈念sama閱讀 33,712評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站绊起,受9級特大地震影響精拟,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜虱歪,卻給世界環(huán)境...
    茶點故事閱讀 39,261評論 3 307
  • 文/蒙蒙 一蜂绎、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧笋鄙,春花似錦师枣、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,264評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽洗贰。三九已至,卻和暖如春陨倡,著一層夾襖步出監(jiān)牢的瞬間敛滋,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,486評論 1 262
  • 我被黑心中介騙來泰國打工兴革, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留绎晃,地道東北人。 一個月前我還...
    沈念sama閱讀 45,511評論 2 354
  • 正文 我出身青樓杂曲,卻偏偏與公主長得像庶艾,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子擎勘,可洞房花燭夜當晚...
    茶點故事閱讀 42,802評論 2 345

推薦閱讀更多精彩內(nèi)容