Сравнение строкового ресурса со строкой

SQLite, Preferences, файлы, SD, Content Provider, XML, JSON
Ответить
patalaka
Сообщения: 15
Зарегистрирован: 26 мар 2012, 19:38

Сравнение строкового ресурса со строкой

Сообщение patalaka » 22 июн 2015, 07:47

Приветствую! Застрял на одном вопросе. Скажите, вот можно ли как-то сократить запись сравнения содержимого?

Код: Выделить всё

if(String.valueOf("Овен").equals(getResources().getString(R.string.aries))){
    Log.d(MainActivity.LOG_TAG, "Получилось");
}else {
    Log.d(MainActivity.LOG_TAG, "Опять шляпа");
}

Аватара пользователя
klblk
Сообщения: 1097
Зарегистрирован: 18 окт 2012, 11:17
Откуда: г. Красноярск

Re: Сравнение строкового ресурса со строкой

Сообщение klblk » 22 июн 2015, 08:12

1) String.valueOf("Овен") => "Овен" => final static String OVEN = "Овен";
2) строку из ресурсов можно тоже получить заранее => String aries = getResources().getString(R.string.aries));
Итого: String.valueOf("Овен").equals(getResources().getString(R.string.aries)) => OVEN.equals(aries)
Хотя непонятно в чем смысл сравнивать одну константу с другой константой.

patalaka
Сообщения: 15
Зарегистрирован: 26 мар 2012, 19:38

Re: Сравнение строкового ресурса со строкой

Сообщение patalaka » 22 июн 2015, 08:43

klblk писал(а):1) String.valueOf("Овен") => "Овен" => final static String OVEN = "Овен";
2) строку из ресурсов можно тоже получить заранее => String aries = getResources().getString(R.string.aries));
Итого: String.valueOf("Овен").equals(getResources().getString(R.string.aries)) => OVEN.equals(aries)
Хотя непонятно в чем смысл сравнивать одну константу с другой константой.
Есть кнопка для выбора зодиаков, при нажатии она вызывает AlertDialog в который я подаю массив строк(ранее полученый из getResources().getStringArray(R.array.all_zodiacs)).
При нажатии на зодиак, она возвращает id позиции, который можно засунуть в массив. Ну и эту позицию сравниваю с Enum через switch.
Возможно есть и более утонченное решение, я буду рад если вы мне подскажете.

Аватара пользователя
doter.ua
Сообщения: 1106
Зарегистрирован: 23 ноя 2013, 16:08
Откуда: Ukraine

Re: Сравнение строкового ресурса со строкой

Сообщение doter.ua » 22 июн 2015, 09:38

id позиции зодиака соответствует позиции элемента в массиве?
Семь раз отмерь - поставь студию.
Эклипс не студия, ошибка вылетит - не исправишь.
Скажи мне кто твой друг, и оба поставили студию.
Студия - свет, а эклипс - тьма.

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Сравнение строкового ресурса со строкой

Сообщение Foenix » 22 июн 2015, 10:11

Для таких целей и вообще лучше сравнивать айди а не строку
Строку сравнивают когда юзер вводит слово сам, а если выбирает из списка то обязательно по ид
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

patalaka
Сообщения: 15
Зарегистрирован: 26 мар 2012, 19:38

Re: Сравнение строкового ресурса со строкой

Сообщение patalaka » 22 июн 2015, 14:25

Foenix писал(а):Для таких целей и вообще лучше сравнивать айди а не строку
Строку сравнивают когда юзер вводит слово сам, а если выбирает из списка то обязательно по ид
Мне нужно создать 2 массива. Один String - для того что-бы передать его в Alertdialog, и Integer массив - для сравнения id?

patalaka
Сообщения: 15
Зарегистрирован: 26 мар 2012, 19:38

Re: Сравнение строкового ресурса со строкой

Сообщение patalaka » 22 июн 2015, 14:54

doter.ua писал(а):id позиции зодиака соответствует позиции элемента в массиве?
Конечно, я же подаю массив в AlertDialog:

Код: Выделить всё

mImageZodiac.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                mZodiacsNames = getResources().getStringArray(R.array.all_zodiacs);
                final int[] mIntZodiacNames = {
                        R.string.aries,
                        R.string.leo,
                        R.string.sagittarius,
                        R.string.taurus,
                        R.string.virgo,
                        R.string.capricorn,
                        R.string.gemini,
                        R.string.libra,
                        R.string.aquarius,
                        R.string.cancer,
                        R.string.scorpio,
                        R.string.pisces,
                };


                AlertDialog.Builder ad = new AlertDialog.Builder(getActivity());
                ad.setTitle("Гороскопы");
                ad.setItems(mZodiacsNames, new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        switch (mIntZodiacNames[which]){
                            case R.string.aries:
                                mImageZodiac.setImageResource(R.mipmap.aries);
                                break;
                            case R.string.leo:
                                mImageZodiac.setImageResource(R.mipmap.leo);
                                break;
                            case R.string.sagittarius:
                                mImageZodiac.setImageResource(R.mipmap.sagittarius);
                                break;
                            case R.string.taurus:
                                mImageZodiac.setImageResource(R.mipmap.taurus);
                                break;
                            case R.string.virgo:
                                mImageZodiac.setImageResource(R.mipmap.virgo);
                                break;
                            case R.string.capricorn:
                                mImageZodiac.setImageResource(R.mipmap.capricorn);
                                break;
                            case R.string.gemini:
                                mImageZodiac.setImageResource(R.mipmap.gemini);
                                break;
                            case R.string.libra:
                                mImageZodiac.setImageResource(R.mipmap.libra);
                                break;
                            case R.string.aquarius:
                                mImageZodiac.setImageResource(R.mipmap.aquarius);
                                break;
                            case R.string.cancer:
                                mImageZodiac.setImageResource(R.mipmap.cancer);
                                break;
                            case R.string.scorpio:
                                mImageZodiac.setImageResource(R.mipmap.scorpio);
                                break;
                            case R.string.pisces:
                                mImageZodiac.setImageResource(R.mipmap.pisces);
                                break;
                        }
                        mTitleZodiac.setText(mZodiacsNames[which]);
                    }
                });
                ad.create().show();
            }
        });
вот XML:

Код: Выделить всё

<string name="aries">Овен</string>
    <string name="leo">Лев</string>
    <string name="sagittarius">Стрелец</string>
    <string name="taurus">Телец</string>
    <string name="virgo">Дева</string>
    <string name="capricorn">Козерог</string>
    <string name="gemini">Близнецы</string>
    <string name="libra">Весы</string>
    <string name="aquarius">Водолей</string>
    <string name="cancer">Рак</string>
    <string name="scorpio">Скорпион</string>
    <string name="pisces">Рыба</string>


    <string-array name="all_zodiacs">
        <item>@string/aries</item>
        <item>@string/leo</item>
        <item>@string/sagittarius</item>
        <item>@string/taurus</item>
        <item>@string/virgo</item>
        <item>@string/capricorn</item>
        <item>@string/gemini</item>
        <item>@string/libra</item>
        <item>@string/aquarius</item>
        <item>@string/cancer</item>
        <item>@string/scorpio</item>
        <item>@string/pisces</item>
    </string-array>
Пока это лучший вариант из всех что перепробовал. 2 массива, один int для сравнения, второй String для AlertDialog

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Сравнение строкового ресурса со строкой

Сообщение Foenix » 23 июн 2015, 01:20

нет времени вникать, но не забывай, что еще есть двумерные массивы,
или плюс массив имеет значение и индекс. ЗНачение допустим у тебя строка, а по индексу можно что-то с чем-то сравнивать. Используй что тебе удобнее, сравнивая исключительно индексы элементов.
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

Ответить