Ошибка Android toast.makeText в контексте - PullRequest
4 голосов
/ 03 мая 2011

У меня проблемы с вызовом toast.Maketext внутри слушателя местоположения. Контекст недоступен, что я делаю не так?

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

    }

};

Ответы [ 3 ]

7 голосов
/ 03 мая 2011

Если это объявление LocationListener находится внутри класса активности (скажем, MyActivity), вы должны создать Toast как:

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

В случае, если LocationListener объявлен в классе без контекста, как в вашем случае BroadcastReceiver, вы можете передать контекст его конструктору:

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
    }
}
4 голосов
/ 03 мая 2011

Убедитесь, что вы используете контекст класса Activity. Если вы используете этот тост в Activity, напишите, Classname.this вместо контекста

2 голосов
/ 27 марта 2012

Поскольку контекст недоступен, вы можете передать его в конструктор

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...