Приложение Android закрывается каждый раз, когда я запускаю это условное выражение «если еще» в слушателе Onclick для кнопки - PullRequest
0 голосов
/ 03 сентября 2018

Я новичок в Android, и в настоящее время я работаю над приложением, которое требует использования оператора else if. Ниже приведен фрагмент кода:

submit.setOnClickListener(new OnClickListener() {
  @Override
  public void onClick(View v) {


    if ((CCValue.equals("3") && MVValue.equals("3.5")) || (CCValue.equals("3") && MVValue.equals("4")) || (CCValue.equals("3") && MVValue.equals("5")) ||
      (CCValue.equals("4") && MVValue.equals("4.5")) || (CCValue.equals("4") && MVValue.equals("5")) || (CCValue.equals("5") && MVValue.equals("5"))) {

      thresholdValue = 1;

    } else {
      thresholdValue = 0;
    }

    threshold.setText(thresholdValue);

  }
});

Submit - это имя кнопки, по которой пользователь будет нажимать, и компилятор перейдет в оператор «если». CCValue и MVValue - это строковые переменные, которые я сохраняю из двух выбранных пользователем блесен. «thresholdValue» - целочисленная переменная, которая получит значение в соответствии с оператором if. Наконец, «порог» является компонентом EditText.

Теперь я пытаюсь сравнить значения, хранящиеся в строковых переменных, через условие «если». Но каждый раз, когда я нажимаю кнопку «Отправить», происходит сбой приложения. Какие изменения я должен сделать, чтобы этот код работал успешно?

Ниже logcat для того же:

09-03 05:59:34.209 9772-9772/? I/zygote: Not late-enabling -Xcheck:jni (already on)
09-03 05:59:34.261 9772-9772/? W/zygote: Unexpected CPU variant for X86 using defaults: x86
09-03 05:59:34.413 9772-9779/? E/zygote: Failed writing handshake bytes (-1 of 14): Broken pipe
09-03 05:59:34.413 9772-9779/? I/zygote: Debugger is no longer active
09-03 05:59:34.617 9772-9772/? I/InstantRun: starting instant run server: is main process
09-03 05:59:35.038 9772-9783/? I/zygote: Background concurrent copying GC freed 8279(3MB) AllocSpace objects, 0(0B) LOS objects, 54% free, 1304KB/2MB, paused 5.265ms total 87.569ms
09-03 05:59:35.234 9772-9795/? D/OpenGLRenderer: HWUI GL Pipeline
09-03 05:59:35.259 9772-9777/? I/zygote: Do partial code cache collection, code=8KB, data=29KB
09-03 05:59:35.262 9772-9777/? I/zygote: After code cache collection, code=8KB, data=29KB
    Increasing code cache capacity to 128KB
09-03 05:59:35.458 9772-9795/saferatestarter.dasnr.okstate.edu.glanceandgo I/zygote: android::hardware::configstore::V1_0::ISurfaceFlingerConfigs::hasWideColorDisplay retrieved: 0
09-03 05:59:35.458 9772-9795/saferatestarter.dasnr.okstate.edu.glanceandgo I/OpenGLRenderer: Initialized EGL, version 1.4
09-03 05:59:35.458 9772-9795/saferatestarter.dasnr.okstate.edu.glanceandgo D/OpenGLRenderer: Swap behavior 1
09-03 05:59:35.459 9772-9795/saferatestarter.dasnr.okstate.edu.glanceandgo W/OpenGLRenderer: Failed to choose config with EGL_SWAP_BEHAVIOR_PRESERVED, retrying without...
09-03 05:59:35.459 9772-9795/saferatestarter.dasnr.okstate.edu.glanceandgo D/OpenGLRenderer: Swap behavior 0
09-03 05:59:36.249 9772-9795/saferatestarter.dasnr.okstate.edu.glanceandgo D/EGL_emulation: eglCreateContext: 0xed50e7c0: maj 3 min 1 rcv 4
09-03 05:59:36.418 9772-9795/saferatestarter.dasnr.okstate.edu.glanceandgo D/EGL_emulation: eglMakeCurrent: 0xed50e7c0: ver 3 1 (tinfo 0xed51b510)
09-03 05:59:36.420 9772-9795/saferatestarter.dasnr.okstate.edu.glanceandgo E/eglCodecCommon: glUtilsParamSize: unknow param 0x000082da
    glUtilsParamSize: unknow param 0x000082da
09-03 05:59:36.579 9772-9772/saferatestarter.dasnr.okstate.edu.glanceandgo I/Choreographer: Skipped 77 frames!  The application may be doing too much work on its main thread.
09-03 05:59:36.600 9772-9795/saferatestarter.dasnr.okstate.edu.glanceandgo D/EGL_emulation: eglMakeCurrent: 0xed50e7c0: ver 3 1 (tinfo 0xed51b510)
09-03 05:59:36.854 9772-9772/saferatestarter.dasnr.okstate.edu.glanceandgo D/AndroidRuntime: Shutting down VM


    --------- beginning of crash
09-03 05:59:36.856 9772-9772/saferatestarter.dasnr.okstate.edu.glanceandgo E/AndroidRuntime: FATAL EXCEPTION: main
    Process: saferatestarter.dasnr.okstate.edu.glanceandgo, PID: 9772
    java.lang.NumberFormatException: For input string: "Select"
        at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:2043)
        at sun.misc.FloatingDecimal.parseDouble(FloatingDecimal.java:110)
        at java.lang.Double.parseDouble(Double.java:539)
        at saferatestarter.dasnr.okstate.edu.glanceandgo.MainActivity$1.onItemSelected(MainActivity.java:52)
        at android.widget.AdapterView.fireOnSelected(AdapterView.java:944)
        at android.widget.AdapterView.dispatchOnItemSelected(AdapterView.java:933)
        at android.widget.AdapterView.-wrap1(Unknown Source:0)
        at android.widget.AdapterView$SelectionNotifier.run(AdapterView.java:898)
        at android.os.Handler.handleCallback(Handler.java:790)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:164)
        at android.app.ActivityThread.main(ActivityThread.java:6494)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)

Ответы [ 3 ]

0 голосов
/ 03 сентября 2018

обновить "threshold.setText (thresholdValue);" to "threshold.setText (" "+ thresholdValue);"

0 голосов
/ 03 сентября 2018

Вы конвертируете строку "select" в двойное значение. Для преобразования String в double у вас должна быть строка с цифрами.

Здесь у меня есть проверка для вас, которая проверит, что строка содержит только цифры.

if (text.matches("[0-9]+") && text.length() > 2) {

}

0 голосов
/ 03 сентября 2018

EDIT:

Решение, приведенное ниже, решит еще одну аварию. Согласно logcat, вы пытаетесь проанализировать удвоение из spinner выбранного элемента, который может иметь значение «Выбрать», если ничего не выбрано, поэтому происходит сбой при NumberFormatException.

ORIG:

Это вызвано threshold.setText(thresholdValue); строкой. Когда вы ставите int в setText fuction, android будет искать строковый ресурс с id, соответствующим предоставленному значению int. Используйте это вместо:

threshold.setText(String.valueOf(thresholdValue));
...