Моя деятельность не распознает текстовое равенство

Может кто-нибудь помочь мне, я убиваю себя здесь. Так что в моей деятельности у меня есть этот код, и приложение постоянно показывает, что CurrentQ не равен (currentQ.getODG() != answer.getText()) на ответ я вижу через LogCat с Log.d, что слова идентичны. Я просто не могу понять, что я делаю не так.

08-25 05: 28: 45.125: D / yourans (25316): на жизнь у мраку на жизнь у мраку

RadioGroup grp = (RadioGroup) findViewById(R.id.radioGroup1);
    answer = (RadioButton) findViewById(grp.getCheckedRadioButtonId());
    Log.d("yourans", currentQ.getODG() + " " + answer.getText());
    if (currentQ.getODG().equals(answer.getText())) {
        answer.setBackgroundResource(R.drawable.radiotocan);
        Toast poruka1 = Toast.makeText(getApplicationContext(), "Točno!",
                Toast.LENGTH_LONG);
        View vieew1 = poruka1.getView();
        // vieew.setBackgroundColor(Color.parseColor("#BD8BDC"));
        vieew1.setBackgroundResource(R.drawable.toast1);
        poruka1.setView(vieew1);
        poruka1.setGravity(Gravity.CENTER_HORIZONTAL, 1, 1);
        poruka1.show();

        score1++;
        Log.d("score1", "Your score" + score1);

        new Handler().postDelayed(new Runnable() {

            @Override
            public void run() {

                answer.setBackgroundResource(R.drawable.radiomain);
            }
        }, 300);
    }

    else if (currentQ.getODG() != answer.getText()) {

        answer.setBackgroundResource(R.drawable.radionetocan);
        Toast poruka2 = Toast.makeText(getApplicationContext(),
                "Netočno, točan odgovor je:" + currentQ.getODG(),
                Toast.LENGTH_LONG);
        View vieew2 = poruka2.getView();
        // vieew.setBackgroundColor(Color.parseColor("#BD8BDC"));
        vieew2.setBackgroundResource(R.drawable.toast);
        poruka2.setView(vieew2);
        poruka2.setGravity(Gravity.CENTER_HORIZONTAL, 1, 1);
        poruka2.show();
        new Handler().postDelayed(new Runnable() {

            @Override
            public void run() {

                answer.setBackgroundResource(R.drawable.radiomain);
            }
        }, 300);
    }

3 ответа

Пытаться

if(currentQ.getODG().equalsIgnoreCase(answer.getText()))

вместо

if(currentQ.getODG()!=answer.getText())

Надеюсь, поможет!

Java использует знак двойного равенства, чтобы проверить, являются ли объекты, на которые указывают две переменные, одним и тем же объектом, а не эквивалентны ли они. Поскольку оба StringКаждый из них возвращается двумя отдельными вызовами метода, они никогда не будут одним и тем же объектом.

Вместо этого вы захотите использовать один из методов проверки равенства из String учебный класс:

  • .equals(String b) Проверяет, являются ли две строки одинаковыми.
  • .equalsIgnoreCase(String b) Проверяет, являются ли две строки одинаковыми, игнорируя их в верхнем или нижнем регистре.

Есть больше опций, которые вы можете найти в документации класса String, просто проверьте список открытых методов.

В вашем случае измените эту строку:

else if (currentQ.getODG() != answer.getText()) {

Читать как:

else if (!currentQ.getODG().equals(answer.getText())) {

Но для большей гибкости в распознавании ответов используйте .equalsIgnoreCase() как это:

else if (!currentQ.getODG().equalsIgnoreCase(answer.getText())) {

Попробуй это:

менять:

currentQ.getODG().equals(answer.getText())

чтобы:

currentQ.getODG().trim().equalsIgnoreCase(answer.getText().trim())

менять:

else if (currentQ.getODG() != answer.getText())

чтобы:

else

Я думаю, что, вероятно, есть пустое место в вашей строке, поэтому используйте trim() вырезать их, затем сравнить строки, игнорируя заглавную букву.

К вашему сведению: ссылка.

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