请问静态Handler里Toast.makeText()方法的第一个参数怎么设置?

最近在写的程序需要Service和Activity通信,于是想到将MainActivity里面的dataHandler改为static,再在Service里面调用sendMessage()方法。但是handler改为static后,makeText()又报错了,查了一些解决方法都没什么用,请问这个要怎么改?谢谢!

代码:

 public static Handler dataHandler = new Handler(){
        public void handleMessage(android.os.Message msg) {
            if (msg.what == 0) {
                // 处理服务器返回的id,并分配给用户
                try {
                    JSONObject jsonObject = new JSONObject(msg.obj.toString());
                    user.setId(jsonObject.getInt("id"));
                    Toast.makeText(MainActivity.this, "成功连接到服务器,id = " + user.getId(), Toast.LENGTH_SHORT).show();
                } catch (JSONException e) {
                    // TODO Auto-generated catch block
                    Toast.makeText(MainActivity.this, "用户id读取错误!", Toast.LENGTH_SHORT).show();
                    e.printStackTrace();
                }       
            } 
            ...
    }

MainActivity.this 报错:No enclosing instance of the type MainActivity is accessible in scope

5个回答

定义一个静态的activity,this.activity=this; 然后把toast里面 的第一个参数换成activity;
private static Activity ac;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ac = this;
}

            public static Handler handler = new Handler(new Handler.Callback() {
    @Override
    public boolean handleMessage(Message msg) {
        Toast.makeText(ac, "用户id读取错误!", Toast.LENGTH_SHORT).show();
        return false;
    }
});
SouthToNorth
SouthToNorth 谢谢了,我之前查的是建一个Application,在里面写一个静态的Context,再在MainActivity的onCreate里面写个getApplicationContext(),这样也行。不过当时我一糊涂写在Application里了。
2 年多之前 回复

Service和Activity通信可以使用广播或者通过Binder对象通信的, 也非常方便。

SouthToNorth
SouthToNorth 是的,但是我的Handler是之前写的,已经写了一大堆了,改的太麻烦了。
2 年多之前 回复

MainActivity.this改成getApplicationContext

SouthToNorth
SouthToNorth 回复old四的four: this也不行
2 年多之前 回复
viewgroup
viewgroup 回复old四的four: 静态不能调用非静态的,他的handler是静态的,那么里面是不能直接调用非静态方法和属性的
2 年多之前 回复
Mr_wzc
wuzuchang1994 哦应该是直接用this
2 年多之前 回复

直接用this 啊,很明显,dataHandler在MainActivity中,handleMessage由MainActivity回调。

SouthToNorth
SouthToNorth 不能用this,我写的是内部类,那样就指的是handler了
2 年多之前 回复

handler这样静态写不是会泄漏内存的么#132

SouthToNorth
SouthToNorth 如果不写成静态的才可能会泄露内存啊: This Handler class should be static or leaks might occur...
2 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
安卓 Toast.makeText 第一个参数的问题,总是出错
Toast.makeText 第一个参数的问题,总是出错rnrn尝试了 rngetApplicationContext()rnthisrnhots.thisrnrn就是一个普通的类 ! 好郁闷啊 rnrn```rnpublic class hots extends UZtop rnrn public void nowsa()rn String showMsg = moduleContext.optString("msg");rn Log.d("name", "DDD:收到消息"+showMsg);rnrn Toast.makeText(getApplicationContext(), "出错了", Toast.LENGTH_LONG).show();rnrn rnrnrn```
Toast.maketext第一个参数context所引发的问题
在Android工程中经常用到 Toast来显示提示,在maketext的第一个参数是要求传递一个contextrn那么问题来了rn rn 有时候是使用getApplicationContext();rn 有时候是Activity.thisrn 而有时候又直接是 thisrn rn所有想请问一下 这三个参数 分别是在什么场景下使用 最好能分别举出例子 rn谢谢rn
请问这两种方法怎么传第一个参数???
public DataSet ExecuteDs(string connectionString, string tbname)rnrnrn rnrnpublic DataSet ExecuteDs(SqlConnection connection, string tbname)rnrnrn
请问AfxBeginThread();里面的参数怎么设置
一般的线程函数 UINT MyThread(LPVOID p),如果我想传参,rnUINT MyThread(LPVOID p,char * filename)rn请问AfxBeginThread();里面的参数怎么设置,rn我是这样设置的AfxBeginThread(MYThread,(LPVOID) this)有问题
请问Toast.makeText的问题
最近开发了一个app,使用webview加载网站的,有实现点击两次返回就退出程序的功能,使用了Toast.makeText提示 "再按一次退出程序",但在测试时发现某些手机在点击时会自动连续弹出显示两次提示,一次是当前网址,再一次是"再按一次退出程序",请问如何取消显示网址,只显示"再按一次退出程序"?退出的代码如下: public void exit(){           if (!is
Toast.makeText()各个参数都是干嘛的
Toast.makeText()各个参数都是干嘛的 Toast:是一个类,主要管理消息的提示。 makeText(),是Toast的一个方法,用来显示信息,分别有三个参数。 第一个参数:this,是上下文参数,指当前页面显示 第二个参数:“string string string ”是你想要显示的内容,也可以是“你好!”。这个是随便定义的,显示你想要显示的内容。 第三个参数:Toast.LENGT...
Snmp CreateSession()第一个参数怎么设置?
我做了一个动态链接库,要在库刚刚启动的时候调用CreateSession 我该怎么设置它的第一个参数呢?
请问ShellExecute的第一个参数
0,和self.handlern按照字面解说是parent不同。rn那么parent=0,和parent=self.handle甚至parent = nil;rn具体效果有什么区别么?
请问CMultiDocTemplate()的第一个参数应该怎么加?
是什么意思?怎么加?看了msdn但是不是很明白?
Toast.makeText问题
这个example9会是什么呢?rn[img=https://img-bbs.csdn.net/upload/201705/08/1494210282_81129.jpg][/img]rn
请问在css里怎样设置 的属性参数?
这样写不对啊rntablern bordercolorlight:#005fbd;rn bordercolordark;#99ccff;rnrnrn有没有这方面的介绍
请问在Eclipse里怎么设置运行时的参数呢?
请问在Eclipse里怎么设置运行时的参数呢?就象在DOS环境下运行时输入的参数一样。
请问在VC里怎么获得和设置打印的参数呢????急
我希望获得打印设置dlg里面那些rnrn打印纸张类型,纸张大小,横向还是纵向什么的rn以及怎么设置这些属性呢?rnrn还有页边距是怎么设置和获得的?
请问ReceiveFrom()第一个参数怎么用,收到的数据用MessageBox()显示的时候第一个参数怎么用.
请问ReceiveFrom()第一个参数怎么用,收到的数据用MessageBox()显示的时候第一个参数怎么用rn.
请问有没有删掉request里的参数的方法?
提交表单的时候,经常会在servlet用到request.getParameter("username")的,现在我想在参数拿出来后,将请求里的"username"参数销毁清空,请问有办法可以做到吗?
高手指教,SHFileOperaton里的参数怎么设置
SHFileOperation(SHFILEOPSTRUCT& sfos);rn我用的是delete操作rnSHFILEOPSTRUCT中的pFrom很怪rn如果我这样附值没问题rnpForm = "d:\\tst.txt";rn但是如果我改成这样,就总提示找不到牙什么的rnchar path[] = "d:\\tst.txt";rnpForm = path;rn如何搞定啊。。。。。。。
Linux 设置静态IP方法
1前言 2解决办法 1 首先查询本机网卡名称 2 修改配置文件 3重新启动Linux1前言使用想要通过xshell等软件通过Windows访问Linux主机时,需要给Linux设置一个固定的IP,以避免每次链接时需要查看IP,更改要连接的Linux主机IP地址。2解决办法设置IP通过修改配置文件/etc/network/interfaces来完成,如果是使用VMware等软件应该将网络设置为桥接模式
设置静态ip的方法--开发板
错误: 临时设置开发板的ip地址命令如下:ifconfig eth0 192.168.1.100        重启开发板后,ip地址恢复为默认值原因: 开发板需要设置静态ip处理方法:1、查找相应目录ls /etc/network/ 2、编辑interfacesvi /etc/network/interfacesiface eth0 inet dhcp更改成ifa...
LINUX下设置静态IP的方法
注意:所有操作均使用root用户 进入系统图形界面之后 1.桌面右键:open terminal 2.找到并编辑网卡文件 vi /etc/sysconfig/network-scripts/ifcfg-eth0 按i键进入输入模式 DEVICE=eth0 (网卡名称,不做修改) BOOTPROTO=static (IP获取方式:静态) IPADDR=10.32.10.39
Centos7 静态IP设置方法
这里区分两种网络环境① 公司或者企业网络环境,非家庭网络环境下② 家庭网络,个人路由器(同公司或者企业网络差不太多)1. 在公司或者企业网络环境下第一步:设置虚拟机网络为NET模式,不要使用桥接模式,不然虚拟机内的系统无法访问互联网第二步:查看网络设置① 使用还原默认设置之后查看子网IP② 启动Centos系统,使用 ifconfig 命令查看网络情况这里的网卡为ens33,记住这个网卡名称后使用...
CentOs 设置静态IP 方法
http://www.cnblogs.com/coacaio/archive/2011/12/12/2284715.html 在做项目时由于公司局域网采用自动获取IP的方式,导到每次服务器重启主机IP都会变化。为了解决这个问题,我参考了http://blog.sina.com.cn/s/blog_537977e50100qhb5.html的文章然后根据自己的情况设置静态IP解决了这个问题,处理...
开发板设置静态ip的方法
开发板设置静态ip和linux设置静态ip是一个问题。 1. 更改网络接口配合文件 具体位置在 /etc/network/interfaces 在最后,或者找到auto eth0,我们将 auto eth0 iface eth0 inet dhcp更改成iface eth0 inet static         address 192.168.1.xx         netmas
创建方法时参数要怎么设置
我在中间层添加一个方法如Login(),里面的参数是rnUName BSTR [in]rnsucc long* [out,retval] rn在调用时需要这样login(s,i)rn如果我希望可以这样调用,参数的属性要怎么设呢rni=login(s);
MessageBox()第一个参数怎么设?
请问,在Doc类成员函数中,MessageBox()第一个参数怎么设?rn谢谢!!
CreateThread的第一个参数怎么写
这样写对吗?rn SECURITY_ATTRIBUTES secAtt;rn secAtt.bInheritHandle = true;rn secAtt.lpSecurityDescriptor = NULL;rn secAtt.nLength = sizeof(secAtt);rnrnrnrn HANDLE hThread = CreateThread( rn&secAtt,rn0, CVReye: DownFile,vDataPack,0, &dwThreadId);
Handler方法
android 开发中 简单的Handler的使用方法基本实例
请问DataReport里参数查询怎么用?
DataReport用DataEnvironment1连,要返回特定记录,在DataEnvironment1中要用参数查询,参数在属性页的参数页中定义为para1,其值想用Inputbox()输入,在“值”框中填没用。怎么办?
请问Pascal里的out参数怎么用?
如题
请问怎么设置Servlet的初始化参数!
config对象能够使用getInitParameter(name)获得名字为name的初始化参数,小弟新手,请问那么name对应的初始化参数是怎么设置的?
请问怎么设置path参数的虚拟路径呢?
请问怎么设置path参数的虚拟路径呢?rnusing System;rnusing System.Collections;rnusing System.ComponentModel;rnusing System.Data;rnusing System.Drawing;rnusing System.Web;rnusing System.Web.SessionState;rnusing System.Web.UI;rnusing System.Web.UI.WebControls;rnusing System.Web.UI.HtmlControls;rnusing System.Xml;rnrnnamespace WebApplication2rnrn /// rn /// WebForm1 的摘要说明。rn /// rn public class WebForm1 : System.Web.UI.Pagern rn private void Page_Load(object sender, System.EventArgs e)rn rn // 在此处放置用户代码以初始化页面rn Response.Write("..... ");rn tryrn rn XmlDocument myXmlDocument=new XmlDocument();rn myXmlDocument.Load(Server.MapPath("WebApplication2/WebForm1.aspx/books.xml"));rn int n=myXmlDocument.DocumentElement.ChildNodes.Count;rn Response.Write("文档共有"+n+"个"+myXmlDocument.DocumentElement.FirstChild.Name+"的记录: ");rn string firstS=myXmlDocument.DocumentElement.FirstChild.Name;rn DisplayTree(myXmlDocument.DocumentElement.ChildNodes,firstS);rn rn catchrn rn rn rn rnrnrnrnrn rn public void DisplayTree(XmlNodeList nodes,string firstS)rn rn foreach(XmlNode node in nodes)rn rn if(node.Name==firstS)rn rn Response.Write(" ");rn rn if(node.HasChildNodes)rn rn DisplayTree(node.ChildNodes,firstS);rn rn elsern rn Response.Write(""+node.ParentNode.Name+":"+node.Value+" ");rn rn rn rnrnrnrn #region Web 窗体设计器生成的代码rn override protected void OnInit(EventArgs e)rn rn //rn // CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。rn //rn InitializeComponent();rn base.OnInit(e);rn rn rn /// rn /// 设计器支持所需的方法 - 不要使用代码编辑器修改rn /// 此方法的内容。rn /// rn private void InitializeComponent()rn rn this.Load += new System.EventHandler(this.Page_Load);rnrn rn #endregionrn rnrnrn
Android开发之关于静态handler的使用
关于handler的具体概念,我在前面的线程间的通信已经讲过了,这里就不多说,这里主要是讲一下静态handler的使用,因为,如果我们在每个activity或是其他类里面都new 一个handler其实是比较低效率的做法,完全可以只用一个全局的静态handler来进行线程和主线程的通信。先看测试代码:package com.mnsn.lldr.utils;import java.util.Array
静态参数
请问在C中可以定义静态(static)的形参吗?rn我在TC 2.0中编译不通过,在VC 6.0中编译可以通过,这是为什么?
Toast.makeText的几种常见用法
在学习android开发时遇到了Toast.makeText,因为对其不太明白,所以从网上查阅了相关的资料并且将Toast.makeText的几种常见的用法总结如下: 一、Toast总述 Toast 是一个 View 视图,快速的为用户显示少量的信息。 Toast 在应用程序上浮动显示信息给用户,它永远不会获得焦点,不影响用户的输入等操作,主要用于 一些帮助 / 提示。 Toast 最常见
怎么设置静态CRT调用?
怎么设置静态CRT调用?
怎么能在第三个页面使用第一个页面里输入的参数?
本人刚刚开始研究javaweb,很多不懂的地方还要请教各位达人。下面遇到一个问题请赐教。感激不尽!rnrn我在尝试开发一个小的查询系统,用来学习研究javaweb。rnrn现在有三个JSP页面rn页面1:输入若干数据,使用form,然后action到第二页面;rn页面2:可以选择不同的查询内容,选择后跳转到第三个页面;rn页面3:使用页面1的参数进行数据库查询。(页面3负责查询数据库和显示结果)rnrn请问,我怎么能在第三个页面使用页面1里输入的参数?rnrn
请问apply方法的第一个参数为null是什么意思?
请问apply方法的第一个参数为null是什么意思?rn例如:method.apply(null,arr);rn请指教!~谢谢~~
第一个静态登录页面
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>皮爷の香包馆</title> <link rel="shortcut icon" href="py.png" type="img/png"> <link rel="styl...
ShellExecute的参数怎么设置?
我原来的命令为(在dos下执行的方式):rnH:\\ts2tollj.exe H:\\4103.S12 H:\\guan.txtrn怎么用ShellExecute 表达?rn谢谢帮助rnrn
怎么设置初始化参数???
String url = getServletContext().getInitParameter("url");rnrn怎么设置初始化参数???
SetParameterValue的参数怎么设置
我用的水晶报表,在往子报表里传递参数时,设置子报表的参数名为prn当我使用ReportDocument的SetParameterValue,第一个参数怎么设置都说无效。rn我试过rnSetParameterValue("p","我要的值")rnSetParameterValue("?p","我要的值")rnSetParameterValue("@p","我要的值")rn都不行rnrn那应该怎么设啊?rn谢谢。rn
相关热词 c# 标准差 计算 c#siki第五季 c#入门推荐书 c# 解码海康数据流 c# xml的遍历循环 c# 取 查看源码没有的 c#解决高并发 委托 c#日期转化为字符串 c# 显示问号 c# 字典对象池