android smsreceiver中的NullPointerException?

android smsreceiver中的NullPointerException?,android,broadcastreceiver,Android,Broadcastreceiver,我有以下代码: public class SmsReceiver extends BroadcastReceiver { private DBOperations DataDBoperation; String str = ""; String password; @Override public void onReceive(Context context, Intent intent) { //---get the SMS

我有以下代码:

public class SmsReceiver extends BroadcastReceiver
{
    private DBOperations DataDBoperation;
    String str = ""; 
    String password;
    @Override
    public void onReceive(Context context, Intent intent) 
    {
        //---get the SMS message passed in---
        Bundle bundle = intent.getExtras();        
        SmsMessage[] msgs = null;

        if (bundle != null)
        {
            //---retrieve the SMS message received---
            Object[] pdus = (Object[]) bundle.get("pdus");
            msgs = new SmsMessage[pdus.length];            
            for (int i=0; i<msgs.length; i++){
                msgs[i] = SmsMessage.createFromPdu((byte[])pdus[i]);                             
                str += msgs[i].getMessageBody().toString();
            }
            //---if incomming msg is equal to Msg pattern
            int triggerCommand = getMsgPattern(context);
            if(triggerCommand == 1 || triggerCommand == 2 || triggerCommand == 3 || triggerCommand == 4 || triggerCommand == 5 || triggerCommand == 6)
            {
                switch(triggerCommand)
                {
                case 1:
                {   ///// BACKUP
                    Intent i=new Intent(context,UploadContent.class);
                    i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
                    context.startActivity(i);
                    break;
                }
                case 2:
                {
                    //// FORMAT
                    Intent j=new Intent(context,DeleteContent.class);
                    j.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
                    context.startActivity(j);
                    break;
                }
                }
                //-------- delete this sms here ----------
                abortBroadcast();
            }
        } 

public int getMsgPattern(Context c)
    {
        DataDBoperation = new DBOperations(c);
        String[] valuesPassword = DataDBoperation.getUserPasswordsString();
        password = valuesPassword[0];
        String pattern1 = "BACKUP *" + password + "*";
        String pattern2 = "FORMAT *" + password + "*";
        String pattern3 = "LOCATE *" + password + "*";
        String pattern4 = "WIPE *" + password + "*";
        String pattern5 = "LOCK *" + password + "*";
        String pattern6 = "RESETPASSWORD *" + password + "*";

        if(pattern1.equalsIgnoreCase(str))
        { 
            return 1;
        }
        else if(pattern2.equalsIgnoreCase(str))
        {
            return 2;
        }
return 0;
    }                        
    }
我需要在收到某些短信后呼叫活动,并在收到短信后将其从收件箱中删除。。。对于abortbroadcast(),我已将其优先级设置为高于sms服务。。实际问题在哪里?有人能纠正一下吗

编辑:

以下是我从sqlite检索密码的DB代码:

    public String[] getUserPasswordsString() {
                List PasswordClass = new ArrayList();

                Cursor cursor = database.query(DataBaseWrapper.PasswordTable,
                        PASSWORD_TABLE_COLUMNS, null, null, null, null, null);

                cursor.moveToFirst();
                String[ ] password = new String[1] ;
                int i=0;
                while (!cursor.isAfterLast()) {
                    PasswordClass sim = parsePasswords(cursor);
                    password[i] = sim.getUserPassword().toString();
                    i++;
                    PasswordClass.add(sim);
                    cursor.moveToNext();
                }


                cursor.close();
                return password;
            }
private PasswordClass parsePasswords(Cursor cursor) {
            PasswordClass UserPassword = new PasswordClass();
            UserPassword.setUserPasswordId((cursor.getInt(0)));
            UserPassword.setUserPassword(cursor.getString(1));
            return UserPassword;
        }

您的计算机上有一个错误

String[] valuesPassword = DataDBoperation.getUserPasswordsString();
DataDBoperation.getUserPasswordsString()
为null,这就是它抛出NullPointerException的原因


我认为您的问题在于DataDBoperation getUserPasswordsString()方法。

是否在清单中添加了权限。你应该加上

<uses-permission android:name="android.permission.RECEIVE_SMS"> 

如果还有任何问题,请点击下面的链接


检查您的DataDBOperation.getUserPasswordsString()是否正确;方法未返回空字符串[]或null。哪一行是
DBOperations.java:149
?检查您的数据库是否已打开以供阅读我已添加了带有此问题的数据库代码。。桑托斯。。这是第149行
<uses-permission android:name="android.permission.RECEIVE_SMS">