android - 接口对象在广播 onReceive 方法中具有空值
问题描述
我制作了一个接口来从广播接收器获取触发器,但它总是说接口对象具有空值!
这是定义接口的广播接收器类的代码:
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();
}
});
解决方案
您正在清单中注册接收器。你new GeofenceBroadcastReceiver()
的不会被使用。Android 将创建自己的实例,说明GeofenceBroadcastReceiver
何时接收到该接收器的广播。结果,回调将是null
,因为您的 setter 没有被调用。
对于您要解决的任何问题,使用系统广播很可能是错误的解决方案。如果您确信系统广播是正确的答案,并且您希望保持接收器在清单中注册,则GeofenceBroadcastReceiver
需要能够自己完成所有工作,而无需来自其他对象的任何类型的回调。
推荐阅读
- java - 尽管设置了属性,但 AppCompat 工具栏高度缺失(使用 RecyclerView)
- javascript - Expressjs 中的 HTTP PUT 请求
- gradle - Gradle 在构建特定的 android 项目时因锁定而卡住
- android - Graphview,条形颜色每隔一个
- elasticsearch - cron 中的 curl 命令无法正常工作
- android - 在颤动中打开对话框时检测返回按钮按下
- android - 在 Xamarin Android C# 中绑定本机库 (*.so) 和 Java 库
- javascript - 是否需要通过 vue 中的服务器端渲染来保护我的 rest api 或做出反应?
- java - Maven:对消费者隐藏源生成依赖项
- tcl - Tk Text 小部件 - 以行和字符获取新大小