現在、私はarduinoからBluetoothモジュールを介してセンサー値を受信しており、Androidの画面で常時監視しています。しかし、値が "。"のときに特定のコードを実行したい少なくとも7秒間これを維持する。私はpostDelayedメソッドを使用して、7秒後にsensor0変数の値を取得して確認しました。それでも同じ場合は、特定のコードを実行する必要があります。しかし、エラーコードjava.lang.StringIndexOutOfBoundsExceptionで特定の遅延後にアプリケーションがクラッシュします。遅れて実行しようとするとアプリケーションがクラッシュする
if (msg.what == handlerState) { //if message is what we want
String readMessage = (String) msg.obj; // msg.arg1 = bytes from connect thread
recDataString.append(readMessage); //keep appending to string until ~
int endOfLineIndex = recDataString.indexOf("~"); // determine the end-of-line
if (endOfLineIndex > 0) { // make sure there data before ~
String dataInPrint = recDataString.substring(0, endOfLineIndex); // extract string
txtString.setText("Data Received = " + dataInPrint);
int dataLength = dataInPrint.length(); //get length of data received
txtStringLength.setText("String Length = " + String.valueOf(dataLength));
if (recDataString.charAt(0) == '#') //if it starts with # we know it is what we are looking for
{
sensor0 = recDataString.substring(1, 2); //get sensor value from string between indices 1-5
sensorView0.setText(" What We Got Is: " + sensor0 + "");//update the textviews with sensor values
if (sensor0.equals(".")) {
Toast.makeText(getApplicationContext(), "Value of sensor0 is: " + sensor0, Toast.LENGTH_SHORT).show();
// Intent i = new Intent(MainActivity.this, UltimateActivity.class);
// startActivity(i);
final Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
// Do something after 7s = 7000ms
sensor0 = recDataString.substring(1, 2);
if (sensor0.equals(".")){
Toast.makeText(getApplicationContext(), "Value matched... ", Toast.LENGTH_SHORT).show();
}
else{
Toast.makeText(getApplicationContext(), "Current value of sensor0 is: " + sensor0, Toast.LENGTH_SHORT).show();
}
}
}, 7000);
}
}
recDataString.delete(0, recDataString.length()); //clear all string data
// strIncom =" ";
dataInPrint = " ";
}
}
私はpostDelayedメソッド内sensor0変数は文字列値を見つけることができなかったと思います。しかし、どこにエラーがあるのか正確には分かりません。ここで
はlogcatです:
04-25 22:25:17.938 31584-31584/com.example.sparker.bluetoothintegrate E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.sparker.bluetoothintegrate, PID: 31584
java.lang.StringIndexOutOfBoundsException: length=0; regionStart=1; regionLength=1
at java.lang.AbstractStringBuilder.startEndAndLength(AbstractStringBuilder.java:211)
at java.lang.AbstractStringBuilder.substring(AbstractStringBuilder.java:616)
at java.lang.StringBuilder.substring(StringBuilder.java)
at com.example.sparker.bluetoothintegrate.MainActivity$1$1.run(MainActivity.java:93)
at android.os.Handler.handleCallback(Handler.java:815)
at android.os.Handler.dispatchMessage(Handler.java:104)
at android.os.Looper.loop(Looper.java:207)
at android.app.ActivityThread.main(ActivityThread.java:5769)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:789)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:679)
これで問題を解決する方法を教えてください。 –
毎回更新された文字列値を取得できるように、その行が必要です。更新されたsensor0の値がどのように格納されるかを削除しないのですか? –