ZXing SCAN_RESULT, если операторы

это мой первый вопрос о стеке*переполнении*!

Я использую Eclipse с инструментами разработки Android. Я скопировал код с GitHub - ZXing для сканирования QR-кода с помощью Сканер штрих-кода (многие из вас уже видели этот код, я уверен):

public void onClick(View v)
{
        Intent intent = new Intent("com.google.zxing.client.android.SCAN");
        intent.putExtra("SCAN_MODE", "QR_CODE_MODE");
        startActivityForResult(intent,0);
}

Я могу запустить сканер штрих-кода, и он возвращает результаты в методе onActivityResult().

public void onActivityResult(int requestCode, int resultCode, Intent intent)
    {
        if (requestCode == 0)
        {
            if (resultCode == RESULT_OK)
            {
                contents = intent.getStringExtra("SCAN_RESULT");
                format = intent.getStringExtra("SCAN_RESULT_FORMAT");

                // Handle successful scan
                if(contents == "1") 
                {
                    contentsLat = contents;
                }
                else if(contents == "0")
                {
                    contentsRow = contents;
                }
                else
                {
                    Toast.makeText(getApplicationContext(), "Code Not Recognized\n"+contents+"\n1", Toast.LENGTH_LONG).show();
                }
            }
            else if (resultCode == RESULT_CANCELED)
            {
                // Handle cancel
                Toast.makeText(getApplicationContext(), "Unsuccessful Scan", Toast.LENGTH_SHORT).show();
            }
        }
    }

Однако оператор else выполняется всегда... если только я явно не приравняю contents к 1. Ниже приведена ссылка на снимок экрана (у меня пока нет прав на встроенное изображение) выполняемого тела else, и всплывающее уведомление ясно указывает, что contents=1. Что я сделал не так? Я что-то пропустил?

Спасибо всем.


person Nastics    schedule 14.03.2014    source источник
comment
При сравнении строк ВСЕГДА используйте .equals, поэтому попробуйте if(contents.equals(1))   -  person Sean    schedule 14.03.2014
comment
Спасибо, Шон. Это исправление. Я признателен за это.   -  person Nastics    schedule 14.03.2014


Ответы (1)


Добро пожаловать в stackoverflow!

Я видел, что это очень распространенная проблема среди начинающих программистов Java :), для сравнения строк мы должны использовать метод equals().

Измените свой код на:

 // Handle successful scan
                if(contents.equals("1")){
                    contentsLat = contents;
                }
                else if(contents.equals("0")){
                    contentsRow = contents;
                }

Больше информации:

Сравнение Java с == двух строк неверно?

Метод equals()

person Jorgesys    schedule 14.03.2014