Java 无法启动接收器null pointerException

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);

我正在检查服务是否正在运行。如果它正在运行,我确实想发送短信。不幸的是,当服务未运行时,应用程序崩溃,并且当服务运行时,sms不会发送

日志:

E/SmsReciever﹕ Exeption SMSReceiveJava.lang.NullPointerException

CallHelper类中的stop方法:

 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对象。