Объект интерфейса имеет нулевое значение в методе Broadcast onReceive - PullRequest
0 голосов
/ 17 марта 2020

Я создал интерфейс для получения триггера от широковещательного приемника, но он всегда говорит, что объект интерфейса имеет нулевое значение!

Это код класса Broadcast Receiver, в котором определяется интерфейс:

public class GeofenceBroadcastReceiver extends BroadcastReceiver {

public interface ResultListener {
    public void SomeWorkToDo();
}

private ResultListener resultListener;

public void setter(ResultListener listener){
    Log.i("setter","working");
     this.resultListener=listener;
}

@Override
public void onReceive(Context context, Intent intent) {
    GeofencingEvent geofencingEvent = GeofencingEvent.fromIntent(intent);
    if (geofencingEvent.hasError()) {
        Toast.makeText(context, "error", Toast.LENGTH_SHORT).show();
        return;
    }

    int geofenceTransition = geofencingEvent.getGeofenceTransition();
    if (geofenceTransition == Geofence.GEOFENCE_TRANSITION_DWELL) {
        Log.i("Geo Fencing broadcast","Running");
        Toast.makeText(context, "You Are Arrived!!!", Toast.LENGTH_SHORT).show();
        resultListener.SomeWorkToDo();
    }else {
        Toast.makeText(context, "something went wrong", Toast.LENGTH_SHORT).show();
    }
}

Это код файла манифеста:

<receiver android:name=".GeoFencing.GeofenceBroadcastReceiver" />

Этот код используется в MainActivity:

GeofenceBroadcastReceiver geofenceBroadcastReceiver=new GeofenceBroadcastReceiver();
    geofenceBroadcastReceiver.setter(new GeofenceBroadcastReceiver.ResultListener() {
        @Override
        public void SomeWorkToDo() {
            Log.i("our interface","working");
            startActivity(new Intent(ViewPlace.this,ViewDirections.class));
            finishAffinity();
        }
    });

1 Ответ

0 голосов
/ 17 марта 2020

Вы регистрируете получателя в манифесте. Ваш new GeofenceBroadcastReceiver() не будет использоваться. Android создаст свой собственный экземпляр GeofenceBroadcastReceiver при получении широковещательной рассылки для этого получателя. В результате обратный вызов будет null, поскольку ваш установщик не вызывается.

Весьма вероятно, что использование системной трансляции является неправильным решением для любой проблемы, которую вы пытаетесь решить. Если вы уверены, что системная трансляция является правильным ответом, и вы sh хотите сохранить получателя зарегистрированным в манифесте, GeofenceBroadcastReceiver должен иметь возможность выполнять всю свою работу самостоятельно, без каких-либо обратных вызовов. от других объектов.

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