Как мне преодолеть NoSuchElementFoundException?

У меня есть NoSuchElementFoundException но я не могу найти строку, где находится ПБ. Всякий раз, когда моя программа получает SMS, она выдает это исключение.

Bundle bundle = intent.getExtras();
Object[] messages = (Object[]) bundle.get("pdus");
SmsMessage[] sms = new SmsMessage[messages.length];
for(int n = 0; n < messages.length; n++) {
    sms[n] = SmsMessage.createFromPdu((byte[]) messages[n]);
}
for(SmsMessage msg : sms) {
    if(msg.getOriginatingAddress().equals("+923313552256") 
        && Data.login == true 
        && !(msg.getMessageBody().contains("OK"))) {
        MainActivity.startAlarm(msg.getMessageBody(),context);
    }
    if(msg.getOriginatingAddress().equals("+923313552256") 
        && msg.getMessageBody().contains("OK")) {   
        LoginPage.redirect();
    }
}

StartAlarm в MainActivity

public static void startAlarm(String msg,Context context)
{
    Uri notification = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_ALARM);
    mp = MediaPlayer.create(context, notification);
    mp.start();
    btstop.setVisibility(1);    
    btmap.setVisibility(1); 
    StringTokenizer tokens = new StringTokenizer(msg, " ");
    plat = tokens.nextToken();
    plong = tokens.nextToken();
}

LogCat:

09-06 20:04:21.619: E/AndroidRuntime(16819): FATAL EXCEPTION: main
09-06 20:04:21.619: E/AndroidRuntime(16819): java.lang.RuntimeException: Unable to start receiver com.example.hurryapppointalert_client.TextMessageReceiver: java.util.NoSuchElementException
09-06 20:04:21.619: E/AndroidRuntime(16819):    at android.app.ActivityThread.handleReceiver(ActivityThread.java:2140)
09-06 20:04:21.619: E/AndroidRuntime(16819):    at android.app.ActivityThread.access$1500(ActivityThread.java:128)
09-06 20:04:21.619: E/AndroidRuntime(16819):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1211)
09-06 20:04:21.619: E/AndroidRuntime(16819):    at android.os.Handler.dispatchMessage(Handler.java:99)
09-06 20:04:21.619: E/AndroidRuntime(16819):    at android.os.Looper.loop(Looper.java:137)
09-06 20:04:21.619: E/AndroidRuntime(16819):    at android.app.ActivityThread.main(ActivityThread.java:4517)
09-06 20:04:21.619: E/AndroidRuntime(16819):    at java.lang.reflect.Method.invokeNative(Native Method)
09-06 20:04:21.619: E/AndroidRuntime(16819):    at java.lang.reflect.Method.invoke(Method.java:511)
09-06 20:04:21.619: E/AndroidRuntime(16819):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:993)
09-06 20:04:21.619: E/AndroidRuntime(16819):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:760)
09-06 20:04:21.619: E/AndroidRuntime(16819):    at dalvik.system.NativeStart.main(Native Method)
09-06 20:04:21.619: E/AndroidRuntime(16819): Caused by: java.util.NoSuchElementException
09-06 20:04:21.619: E/AndroidRuntime(16819):    at java.util.StringTokenizer.nextToken(StringTokenizer.java:208)
09-06 20:04:21.619: E/AndroidRuntime(16819):    at com.example.hurryapppointalert_client.MainActivity.startAlarm(MainActivity.java:156)
09-06 20:04:21.619: E/AndroidRuntime(16819):    at com.example.hurryapppointalert_client.TextMessageReceiver.onReceive(TextMessageReceiver.java:26)
09-06 20:04:21.619: E/AndroidRuntime(16819):    at android.app.ActivityThread.handleReceiver(ActivityThread.java:2133)
09-06 20:04:21.619: E/AndroidRuntime(16819):    ... 10 more

1 ответ

Похоже, ваша ошибка происходит потому, что msg аргумент startAlarm в нем нет нескольких токенов; ты звонишь nextToken() два раза, но если нет места, он выйдет из строя на втором.

Вы должны проверить значение msg (вероятно, Log.d(msg)) и убедитесь, что это то, что вы думаете.

Другие вопросы по тегам