Android的toast.makeText方面的错误 [英] Android toast.makeText context error

查看:208
本文介绍了Android的toast.makeText方面的错误的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我无法调用toast.Maketext位置监听器内。上下文是不可用,我究竟做错了什么?

 私人LocationListener的LL =新LocationListener的(){    公共无效onLocationChanged(位置L){
        // SMSReceiver.l = 1;
        字符串s =;
        S + =\\ 970 12:+ l.getTime()+\\ n;
        S + =\\ tLatitude:+ l.getLatitude()+°\\ N的;
        S + =\\ tLongitude:+ l.getLongitude()+°\\ N的;
        S + =\\ tAccuracy:+ l.getAccuracy()+米\\ N的;
        S + =\\ tAltitude:+ l.getAltitude()+米\\ N的;
        S + =\\ tSpeed​​:+ l.getSpeed​​()+米\\ N的;        // TODO自动生成方法存根
        如果(l.hasSpeed​​()){
            myspeed的= l.getSpeed​​();
        }        Log.i(DEBUG_TAG,在当前位置更改:(+ S +));
ERROR这里 - > Toast.makeText(上下文,S,Toast.LENGTH_SHORT).show();
    }    公共无效onProviderDisabled(字符串为arg0){
        // TODO自动生成方法存根    }    公共无效onProviderEnabled(字符串为arg0){
        // TODO自动生成方法存根    }    公共无效onStatusChanged(字符串为arg0,ARG1 INT,捆绑ARG2){
        // TODO自动生成方法存根    }};


解决方案

如果这个 LocationListener的的声明是一个活动类中(例如: MyActivity ),你应该创建吐司为:

  Toast.makeText(MyActivity.this,S,Toast.LENGTH_SHORT).show();

在情况下, LocationListener的在无环境类被声明,就像在你的情况下,广播接收器,你可以通过上下文给它的构造:

 私人最后一类MyReceiver扩展广播接收器
{
    私人MyLocationListener侦听器;
    公共MyReceiver(最终上下文的背景下)
    {
        this.listener =新MyLocationListener(背景);
    }    私人final类MyLocationListener实现LocationListener的
    {
        私人上下文的背景下;
        公共MyLocationListener(最终上下文的背景下)
        {
            this.context =背景;
        }        @覆盖
        公共无效onLocationChanged(地点)
        {
            // ...
            Toast.makeText(背景下,这里面包消息,Toast.LENGTH_SHORT).show();
        }        //实现的方法,其余
    }    @覆盖
    公共无效的onReceive(上下文的背景下,意图意图)
    {
        //请注意,您在这里有一个背景下,您可以收到广播消息时使用
    }
}

I am having trouble calling toast.Maketext inside of a location listener. The context is not available, what am I doing wrong?

private LocationListener ll = new LocationListener() {

    public void onLocationChanged(Location l) {
        // SMSReceiver.l = l;
        String s = "";
        s += "\tTime: " + l.getTime() + "\n";
        s += "\tLatitude:  " + l.getLatitude() + "°\n";
        s += "\tLongitude: " + l.getLongitude() + "°\n";
        s += "\tAccuracy:  " + l.getAccuracy() + " metres\n";
        s += "\tAltitude:  " + l.getAltitude() + " metres\n";
        s += "\tSpeed:  " + l.getSpeed() + " metres\n";

        // TODO Auto-generated method stub
        if (l.hasSpeed()) {
            mySpeed = l.getSpeed();
        }

        Log.i(DEBUG_TAG, "On Location Changed: (" + s + ")");
ERROR HERE-->       Toast.makeText(context, s, Toast.LENGTH_SHORT).show();
    }

    public void onProviderDisabled(String arg0) {
        // TODO Auto-generated method stub

    }

    public void onProviderEnabled(String arg0) {
        // TODO Auto-generated method stub

    }

    public void onStatusChanged(String arg0, int arg1, Bundle arg2) {
        // TODO Auto-generated method stub

    }

};

解决方案

If this LocationListener declaration is inside an activity class (say: MyActivity), you should create the Toast as:

Toast.makeText(MyActivity.this, s, Toast.LENGTH_SHORT).show();

In case the LocationListener is declared in a contextless class, like in your case a BroadcastReceiver, you can pass the context to its constructor:

private final class MyReceiver extends BroadcastReceiver
{
    private MyLocationListener listener; 
    public MyReceiver(final Context context)
    {
        this.listener = new MyLocationListener(context);
    }

    private final class MyLocationListener implements LocationListener
    {
        private Context context;
        public MyLocationListener(final Context context)
        {
            this.context = context; 
        }

        @Override
        public void onLocationChanged(Location location)
        {
            // ...
            Toast.makeText(context, "Toast message here", Toast.LENGTH_SHORT).show();
        }

        // implement the rest of the methods
    }

    @Override
    public void onReceive(Context context, Intent intent)
    {
        // Note that you have a context here, which you can use when receiving an broadcast message
    }
}

这篇关于Android的toast.makeText方面的错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆