我正在创建一个应用程序,其中我正在使用广播接收器来获取即将到来的消息的内容。我正在使用接口来实现广播接收器的绑定和取消绑定。这已经在我的另一个应用程序中实现了。很好,但是在当前应用中,如果活动被停止或破坏,则应用会崩溃,从而产生以下错误
Caused by: java.lang.NullPointerException: Attempt to invoke interface method 'void com.encureit.a24klen.interfaces.SmsListerner.messageReceived(java.lang.String)' on a null object reference
这是我的广播接收器类代码:
public class SmsReceiver extends BroadcastReceiver {
private static SmsListerner smsListener;
@Override
public void onReceive(Context context, Intent intent) {
Bundle bundle=intent.getExtras();
Object []pdus= (Object[]) bundle.get("pdus");
for (int i=0;i<pdus.length;i++){
SmsMessage smsMessage=SmsMessage.createFromPdu((byte[]) pdus[i]);
String messagBody=smsMessage.getMessageBody();
if (messagBody.contains("Password")){
smsListener.messageReceived(messagBody);
}
}
}
public static void bindListner(SmsListerner listener){
smsListener=listener;
}
public static void unBindListener(){
smsListener=null;
}
}
我在活动的onresume()中调用这些方法
@Override
protected void onResume() {
super.onResume();
SmsReceiver.bindListner(new SmsListerner() {
@Override
public void messageReceived(String messageText) {
String msg=messageText;
if (msg.contains("data")){
//string operations
}
}
});
}
和onDestroy
@Override
protected void onStop() {
super.onStop();
SmsReceiver.unBindListener();
}
消息来了,一切正常,但是当应用程序在后台运行时崩溃了。请为此提供帮助。谢谢
答案 0 :(得分:1)
可以肯定的是,当您停止活动时,smsListener
会变成null
,因为如果您不想在活动停止时发生任何事情,它将崩溃
if (messagBody.contains("Password")&&smsListener!=null){
smsListener.messageReceived(messagBody);
}