Как мне преодолеть 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)
) и убедитесь, что это то, что вы думаете.