Java 无法启动接收器null pointerException
我正在检查服务是否正在运行。如果它正在运行,我确实想发送短信。不幸的是,当服务未运行时,应用程序崩溃,并且当服务运行时,sms不会发送 日志: E/SmsReciever﹕ Exeption SMSReceiveJava.lang.NullPointerException CallHelper类中的stop方法:Java 无法启动接收器null pointerException,java,android,service,sms,broadcastreceiver,Java,Android,Service,Sms,Broadcastreceiver,我正在检查服务是否正在运行。如果它正在运行,我确实想发送短信。不幸的是,当服务未运行时,应用程序崩溃,并且当服务运行时,sms不会发送 日志: E/SmsReciever﹕ Exeption SMSReceiveJava.lang.NullPointerException CallHelper类中的stop方法: public boolean stop() { tm.listen(callStateListener, PhoneStateListener.LISTEN_NONE);
public boolean stop() {
tm.listen(callStateListener, PhoneStateListener.LISTEN_NONE);
// mainActivity.toggleUI();
return false;
}
public class IncomingSms extends BroadcastReceiver {
final SmsManager sms = SmsManager.getDefault();
private CallHelper callHelper;
@Override
public void onReceive(Context context, Intent intent) {
final Bundle bundle = intent.getExtras();
if(callHelper.stop()) {
try {
if (bundle != null) {
final Object[] pdusObj = (Object[]) bundle.get("pdus");
for (int i = 0; i < pdusObj.length; i++) {
SmsMessage currentMessage = SmsMessage.createFromPdu((byte[]) pdusObj[i]);
String phoneNumber = currentMessage.getDisplayOriginatingAddress();
String senderNum = phoneNumber;
String message = currentMessage.getDisplayMessageBody();
String sms = "TEST";
try {
SmsManager smsManager = SmsManager.getDefault();
smsManager.sendTextMessage(senderNum, null, sms, null, null);
Toast.makeText(context, "Sms sent Succesfully", Toast.LENGTH_LONG).show();
} catch (Exception e) {
e.printStackTrace();
Toast.makeText(context, "Sms Failed", Toast.LENGTH_LONG).show();
}
Log.i("SmsReciver", "senderNum: " + senderNum + "; message: " + message);
// Show Alert
int duration = Toast.LENGTH_LONG;
Toast toast = Toast.makeText(context, "senderNum: " + senderNum + ", message: " + message, duration);
toast.show();
} // End For loop
} // bundle is null
} catch (Exception e) {
Log.e("SmsReciever", "Exeption smsReceiver" + e);
}
}
}
}
它现在在我的stop方法上给了我一个nullpointerException。
我不知道为什么。这是一个返回true的布尔方法
CallHelper类:
public class CallHelper {
public Boolean calling = false;
private String phoneNumber ="0";
private String lastNumber;
private int count=0;
public CallHelper() {
}
// Listener to detect incoming calls.
public class CallStateListener extends PhoneStateListener{
@Override
public void onCallStateChanged (int state, String incomingNumber) {
switch (state){...}
private Context ctx;
private TelephonyManager tm;
private CallStateListener callStateListener;
private MainActivity mainActivity;
public CallHelper(Context ctx){
this.ctx = ctx;
callStateListener = new CallStateListener();
}
public void SendMessage(){...}
// Start Call Detection.
public void start() {
tm = (TelephonyManager) ctx.getSystemService(Context.TELEPHONY_SERVICE);
tm.listen(callStateListener, PhoneStateListener.LISTEN_CALL_STATE);
}
// Stop Call Dectection
public boolean stop() {
tm.listen(callStateListener, PhoneStateListener.LISTEN_NONE);
// mainActivity.toggleUI();
return true;
}
}
更新的IncomingSMS类
公共类收入SMS扩展广播接收器{
final SmsManager sms = SmsManager.getDefault();
private CallDetectService callDetectService;
public IncomingSms(){}
@Override
public void onReceive(Context context, Intent intent) {
final Bundle bundle = intent.getExtras();
callDetectService = new CallDetectService();
Intent intent1 = new Intent(context,CallDetectService.class);
if (!callDetectService.stopService(intent1)) {
try {
if (bundle != null) {
final Object[] pdusObj = (Object[]) bundle.get("pdus");
for (int i = 0; i < pdusObj.length; i++) {
SmsMessage currentMessage = SmsMessage.createFromPdu((byte[]) pdusObj[i]);
String phoneNumber = currentMessage.getDisplayOriginatingAddress();
String senderNum = phoneNumber;
String message = currentMessage.getDisplayMessageBody();
String sms = "TEST";
try {
SmsManager smsManager = SmsManager.getDefault();
smsManager.sendTextMessage(senderNum, null, sms, null, null);
Toast.makeText(context, "Sms sent Succesfully", Toast.LENGTH_LONG).show();
} catch (Exception e) {
e.printStackTrace();
Toast.makeText(context, "Sms Failed", Toast.LENGTH_LONG).show();
}
Log.i("SmsReciver", "senderNum: " + senderNum + "; message: " + message);
// Show Alert
int duration = Toast.LENGTH_LONG;
Toast toast = Toast.makeText(context, "senderNum: " + senderNum + ", message: " + message, duration);
toast.show();
} // End For loop
} // bundle is null
} catch (Exception e) {
Log.e("SmsReciever", "Exeption smsReceiver" + e);
}
}
}
final smsmsmanager sms=smsmsmanager.getDefault();
专用CallDetectService CallDetectService;
公共收入SMS(){}
@凌驾
公共void onReceive(上下文、意图){
final Bundle=intent.getExtras();
callDetectService=新的callDetectService();
Intent intent1=新的Intent(上下文,CallDetectService.class);
如果(!callDetectService.stopService(intent1)){
试一试{
if(bundle!=null){
最终对象[]pdusObj=(对象[])bundle.get(“pdus”);
对于(int i=0;i
}您的异常可能发生在
final Object[] pdusObj = (Object[]) bundle.get("pdus");
hear bundle不应包含任何键为“pdus”的对象,因此pdusObj将保持为null,并且对于尝试使用“pdusObj.length”获取长度的循环,您将获得java.lang.NullPointerException 您的异常可能发生在
final Object[] pdusObj = (Object[]) bundle.get("pdus");
hear bundle不应包含任何键为“pdus”的对象,因此pdusObj将保持为null,并且对于尝试使用“pdusObj.length”获取长度的循环,您将获得java.lang.NullPointerException 将批次更改为Log.e(“SmsReciever”,“Exeption smsReceiver.”,e);并附上完整日志。可能是。。。显然,onRecive的第二行中有一个内容是将lot更改为Log.e(“SmsReciever”,“Exeption smsReceiver.”,e);并附上完整日志。可能是。。。显然,onRecive第二行中的某些内容为空。我认为我的问题在于if(callhelper.stop)是,这也可能是因为在if条件下使用之前,您尚未初始化callhelper的callhelper对象。我认为我的问题在于if(callhelper.stop)是的,这也可能是因为在if条件下使用之前,您尚未初始化callhelper的callhelper对象。