关于 Toast 触发android的线程问题

public class ToastUtil {
private static Toast toast = null;
public static void showToast(Context context,String content){
if (toast != null){
toast.cancel();

    }
            Looper.prepare();
    toast = Toast.makeText(context,content,Toast.LENGTH_SHORT);
    toast.show();
    Looper.loop();
}

public static void showToast(Context context,int resid){
    showToast(context,context.getString(resid));
}

}
这是我封装的Toast的代码,其实也就是在网上下载的,我是定义了一个接口,接口里面会用到这个方法,然后接口的方法会在Asynctask中使用,有的时候就会报错toast Can't create handler inside thread that has not called Looper.prepare(),然后在网上搜索,网上的说在 toast = Toast.makeText(context,content,Toast.LENGTH_SHORT);
toast.show();前面加上Looper.prepare();后面加上 Looper.loop();(刚开始我是没有加的),然后就会报错Only one Looper may be created per thread。。。
这是为什么啊?

4个回答

asynctask的实现机制在不同API版本里是有区别的,你使用的是哪个版本的?而且你是在asynctask的哪个回调方法里showtoast的?

stone_you
stone_you 是的,doinbackground是跑在工作线程的,这个线程里是没有loop的,所以会报你的第一个错误。你后来改的那个加了loop,这种方式是错误的,只能在线程里加loop,不是你这样写的。
2 年多之前 回复
qq_35071078
下课睡觉 我知道怎么回事了,我把接口的回调放在doinbackground里面了,才会报这种错误,应该放在o'n'po's'texcute里面就ok了
2 年多之前 回复

你百度一下,用Android的handler,在要弹toast的地方sendemptymessage,在handler的处理消息函数里用toast

口的回调放在doinbackground里面,处理在子线程中了

showToast属于ui操作,你在非UI线程调用怎么能不报错,还有doInbackgroud是子线程处理耗时的,你试着放到postXX下看看,还有这个封装有必要么?

qq_35071078
下课睡觉 这还是有的吧,比较方便啊、、
2 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
关于线程触发的问题
在Global.asax文件中,调用一个类的方法,让一个循环始终在运行(每小时一次),每次循环调用一个处理函数Work()rnrn现在的问题是:运行不稳定,并没有每个小时都循环,而且有个大概的规律,即:上班时,有比较多的人访问时,运行比较正常;但是在下班时,几乎无人访问时,循环就不执行,直到第二天上班后,恢复。周六周日也不执行。请问为什么,如何解决?rnrn以下是执行循环的代码:rnfor(;;)rnrn WriteLog("Start Check");rn Thread.Sleep(3600 * 1000);rn WriteLog("Work Start");rn Work();rnrnrn
Android在分线程展示Toast
for (int i = 0; i 100; i++) { final int index = i; new Thread(new Runnable() { @Override public void run() { Looper.prepare(); if (toast == null) {
android之子线程中的Toast
一直以来都在service和activity中运用过Toast,对于消息的提醒提供了极大地方便。今天在进行代码调试的时候,为了效果无意在线程中使用了Toast,结果却报错了,这让我是木有想到的,看来还是基础太差啊!   经查看Toast的源码,终于搞懂了。 1,关键位置在于Toast初始化的时候: public class Toast { final Handler mHan
Android学习之关于Toast
实现: public static void showToast(final Activity activity, final String word, fina activity.runOnUiThread(new Runnable() { public void run() { final Toast toast = Toast.makeTex...
android 关于线程的问题
这个地方就是本来有一个线程要做一个功能,在这个线程中,我需要再开一个线程来执行另一个操作n举个例子,比如这个线程要做一个读卡(就当是公交卡吧)的操作,当我读到卡中的内容,需要根据这个内容,再开一个线程将数据上传到web,两个线程都是必须要的,可以这个样子写吗![图片说明](https://img-ask.csdn.net/upload/201608/10/1470795641_263900.png),或者直接在这个线程中这样new 一下,求各位大神帮忙解答一下,在线急等
Android在非UI线程中显示Toast
韩梦飞沙  韩亚飞  313134555@qq.com  yue31313  han_meng_fei_sha Android在非UI线程中显示Toast
android toast 的问题!!!!!
我在进程中有时候会造成大量的toastrn使我有可能所有操作都完成了rntoast还在一个一个的跳rnrnrn有没有办法使一有新的toast启动就自动终止上一个toast??????
触发线程事件问题
当程序初始化时,我创建了一个线程,在线程中用WaitForSingleObject去等待一事件。当用户点机某个按纽时,发送这个事件。rn现在线程无法收到这个事件,是什么原因?发送事件的代码和线程代码不在一个.cpp文件中。我把事件对象定义成全局变量的。问题是不是出在这里?
自定义Toast和通过线程限制Toast显示
一 : 自定义Toast  public class ToastView { public static Toast toast; private int time; private Timer timer; public ToastView(Context context, String text) { LayoutInflater in
Android Toast
Android Toast的个性化使用
android Toast
Toast是Android中用来显示显示信息的一种机制,和Dialog不一样的是,Toast是没有焦点的,而且Toast显示的时间有限,过一定的时间就会自动消失。
Android Toast工具类 解决Toast重复显示,Toast一直显示,在线程中可用
Toast工具类 解决Toast重复显示,Toast一直显示,在线程中可用 希望 TkToastUtil 能帮助你 import android.content.Context; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.text.TextUti
Android toast重复显示问题
我做项目时有一个输入位到10位以后加入提示不再输入问题,这里我使用了toast,导致输入超出10位以后,我连续输入,toast会一个接一个重复显示,体验很不好. 首先,我先查看源码分析原因.Toast提示使用 Toast.makeText(getActivity(), R.string.max_digits_alert,Toast.LENGTH_SHORT).show(); show()
android 线程问题 关于handler.post
程序段 为(在activity oncreat方法中):nSystem.out.println("aa");n Runnable r=new Runnable() n n @Overriden public void run() n System.out.println("bb");n n ;n Handler handler =new Handler();n handler.post(r);n n System.out.println("cc");n n 问题:n 为什么执行结果为n aan ccn bbn 而不是n aan bbn ccn runnable对象不是运行在ui线程的吗
Android Toast显示异常的问题
在使用Toast中,遇到以下问题: 字体飘到上面去了,搜了半天终于发现了原因 http://blog.csdn.net/ityangjun/article/details/48728705 将Toast.makeText(Context,String,int)的第一个参数传入ApplicationContext就行了:
android高版本Toast问题
以前使用单例toast来保证连续点击不会一直弹toast,代码如下 import android.content.Context; import android.os.Build; import android.widget.Toast; public class ToastUtil { private static Toast toast; public static vo...
安卓toast与looper线程问题求助大神
是这样的,我自定义了个 名为 showToast()的toast方法rnpublic static void showToast(Context context, String toasttext, int imageID) rn rn Toast toast = new Toast(context);rnrn // 设置布局中图片视图中图片rn image.setImageResource(imageID);rn toast.setGravity(Gravity.CENTER, 0, 0);rn text.setText(toasttext);irn toast.setDuration(Toast.LENGTH_SHORT);rn toast.setView(layout);rn toast.show();rn rn然后我有6个activity,有一个main_activity。main_activity里有个handler,现在就是这7个activity都要用到showToast方法,可是一调用就报错。上网查了下说要加looper.prepare()和looper.loop(),可是我现在调用的是自己自定义的showToast,而且是多次调用,我不知道怎么加,怎么改可以运行。本人菜鸟一枚,恳求大神帮帮忙,指点一下。
关于 Toast
这个信息显示在操作比较快的时候,其显示明显比较滞后。rnrn能不能在设置新的信息时,同时清除前面尚未显示的信息?rn
关于Toast
Toast
自定义Toast实现多次触发只显示一次toast使用改良
使用场景描述 当我们处于某个场景,例如一个按钮可以触发toast的显示,当你在多次点击按钮时,会多次触发toast的显示。而调用android原生的toast的makeText的方式所生产的toast是被加到一个队列里面,然后依次执行。这样就会出现多次点击按钮触发的toast一直会按队列出现在界面上,而且即使退出了当前界面也会一直出现在手机上,而且无法手动取消,这时的用户体验变得非常的差。这
Android Toast 解析以及减少“无意义的”toast
呵呵哒: 这一篇略显无聊,这么说是有道理的,toast这东西真的没什么好讲的,扒着指头数数也就这么几样东西: 1.        自定义样式 2.        自定义位置 3.        主线程中调用show()方法显示,非主线程需要开启looper 然而还是想拉出来溜一圈,为什么呢,测试总是很疯狂,甚至让你有不想使用toast的想法。然而toast又是那么友好的一个widget,
android Toast详解以及自定义Toast例子
Toast的用法 Toast只是一个View视图,快速的为用户显示少量的信息。Toast在应用程序上浮动显示信息给用户,它永远不会获得焦点,不影响用户的输入等操作,主要用于一些帮助 / 提示。 Toast 最常见的创建方式是使用静态方法 Toast toast = Toast.makeText(params)  也可以用其构造函数进行创建  Toast toast = new Toast(ge
android Toast对象的使用 自定义Toast
android Toast对象的使用 自定义Toast
非UI线程中Toast
因为在做项目时候,偶遇需要Toast,但是并非在Activity或者Service中(两者都可直接Toast),所以搜集一些别人的方法,在此记录以备后续只用!        第一种是在大神博客中找到,原文链接:http://blog.csdn.net/xiaanming/article/details/8904645 他是写了一个Utils,写了一个show的函数,我想不需多做解释,可以看看
android默认Toast,各种自定义Toast
默认Toast(大家都会),自定义Toast位置,自定义Toast样式
Android 本次Toast取消上次的Toast的思路
0.前言在Android开发中,经常会出现这样一种情况(特别在调试程序的时候),需要大量的使用Toast,但是即使Toast的时间很短,上次的Toast没有跑完的时候下次Toast也没办法立即执行,一定要等上次的Toast完全执行完成以后才会执行下次的Toast。在本篇教程中,我们主要依靠Toast.cancel方法来达到这种效果。1.实现以及调用1.1具体的Java实现import android
Android自定义Toast取代系统的Toast
为什么要自定义Toast来取代系统的,不知道大家有没有发现这个现象,代码中实现了Toast也show了,为什么有的手机没有显示出来。其实这是因为在部分手机的设置里面有个通知管理,如果你将应用的通知管理禁止掉,你以为只是不显示通知,其实Toast也显示不出来了。在华为荣耀6Plus上,亲测是这个效果。有的时候需要提示用户的行为,结果显示不出来,体验很不好。所以我们要自定义Toast。 直接上代码:
关于Toast提示消失问题
当在一个页面弹出多个Toast,会发现它们会排成一个队列,一个一个显示,当退出或切换这个页面, 这些toast仍会挨个显示完。有时,我们并不需要它们再显示。这就用到了Toast的cancel() 方法。 但是如果仍用之前的习惯写法 Toast.makeText(this, "", Toast.LENGTH_SHORT).show(); 无法调用cancel().所以希望此类中
自定义Android Toast样式
第一步:新建自定义Toast的布局文件 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/toast_layout_root" android:layout_width="match_parent" android:layout_heig
Android中的Toast创建
1.显示文本 //显示文本 // Toast.makeText(getApplicationContext(), "Look me!!", Toast.LENGTH_LONG).show(); 2.显示图片 Toast toast = new Toast(getApplicationContext()); ImageView imageView = new ImageView(get
Android:自定义Toast
本文主要介绍一下Toast的自定义实现以及其应用场景。
Android Toast 使用小技巧
本篇内容也是在网上学的,原文已经找不到了,做此记录。
Android 常用工具Toast的使用
1_Toast介绍:         在屏幕下方浮现出一个窗口,显示一段时间后又消失,这个可视化组件叫做 Toast,它主要用于提示用户某种事件发生了   2_Toast使用方法:     1,简单的调用: Toast toast = Toast.makeText(MainActivity.this,'要显示的内容',Toast.LENGTH_SHORT).show(); 第一个参数为...
android提示Toast的使用
Toast提示在平时很常用,我们在应用中常会看到屏幕下方有时会弹出黑框,上面有一些文字或图片什么的 用来提示用户一些信息,这就是Toast,那要怎么用呢? Toast.makeText(Context context,CharSequance text,int duration).show(); Toast.makeText(Context context,int resId,int dur
android 自定义Toast 实践
android 原生Toast源码并不多,照虎画猫的难度并不大。 刚好最近有一个需求是弹出的 toast需要上面有一个图标,下面是文字。在屏幕上居中显示。 其实代码很少。就两个文件,一个是自定义的布局,一个是.java文件。 custom_toast_layout.xml &amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&amp;gt; &amp;lt;LinearLayout...
Android Toast显示不出来
最近在做项目时,遇到一个问题,就是Toast弹不出来。Toast代码如下:rn[code=java]Toast.makeText(m.getApplicationContext(), msg, Toast.LENGTH_LONG).show();[/code]rn这个问题只在华为3C手机上出现,在别的手机上都可以正常弹出显示。rndebug跟代码时,在华为手机上发现这行代码也走到了,context不为空,msg也不为空。rnrn请叫大神们,有木有遇到过类似情形的?问题原因在哪儿,怎么解决的?多谢了!
android 显示Toast工具类
这是一个Toast工具类,可以直接调用显示,也可以指定显示时间 /**  * Toast的工具类.  */ public class ToastUtil {     private static boolean isShow = true;//默认显示     private static Toast mToast = null;//全局唯一的Toast     /*pr
Android——Toast的例子们
NULL 博文链接:https://z18022893621.iteye.com/blog/1964251
Android中自定义Toast
在Android程序中,Toast可谓用处多多,Toast本身作为消息提示,不占用焦点,用户可以处理其他程序的同时接收Toast中显示的信息。但是我们平常看见的Toast都是黑框白字的,那么我们可以改变原有的Toast,制作我们自定义的Toast吗。这个当然可以。Toast类本身提供了定义Toast布局、显示字体等一些方法。下面以一个例子说明: 新建一个Android工程: activity_m
Android Toast基础与原理
一、Toast的使用方式 Toast.makeText(context,text,duration)public Toast(Context context) 在Android系统中,给我们提供了两种方式来创建一个Toast对象。第一种是通过makeText方法快速构建Toast对象。第二种是通过Toast的构造方法进行创造一个空的(不含View)的Toast对象。注意,通过构造方法创
相关热词 c#检测非法字符 c#双屏截图 c#中怎么关闭线程 c# 显示服务器上的图片 api嵌入窗口 c# c# 控制网页 c# encrypt c#微信网页版登录 c# login 居中 c# 考试软件