@Alexzatey

Почему не работает логика if, else if, else в AsyncTask в методе doInBackground?

В Json нет Валюты "RUB". Решил прописать вручную. Но при выборе в spinner " RUB " и передаче этого значения в doInBackground логика не работает, выбрасывается исключение NullPointerException.

@Override
    protected String doInBackground(String... params) {
        Call<JsonObject> request = callObject.call();
        JsonObject Value2;
        JsonObject Value1;


        try {
            Response<JsonObject> response = request.execute(); 
            JsonObject reader = response.body();
            JsonObject Valute = reader.getAsJsonObject("Valute");
            double a=1.0;
            if (params[0]=="RUB") {
                Value2 = Valute.getAsJsonObject(params[1]);
                out = String.valueOf(Precision.round(a/Value2.get("Value").getAsDouble(),3));
                return out;
            }
            else if (params[1]=="RUB"){
                Value1 = Valute.getAsJsonObject(params[0]);
                out = String.valueOf(Precision.round(Value1.get("Value").getAsDouble()/a,3));
                return out;
            }
            else if (params[0]=="RUB" & params[1]=="RUB") { out = String.valueOf(1.0);
                 return out;
             }
            else {
                Value1 = Valute.getAsJsonObject(params[0]);
                Value2 = Valute.getAsJsonObject(params[1]);
                out = String.valueOf(Precision.round(Value1.get("Value") //Использовал библиотеку
                        .getAsDouble()/Value2.get("Value").getAsDouble(),3));// APACH для округления чисел
                return out;
            }


        } catch (IOException e) {
            e.printStackTrace();
        }
        return out;
    }
  • Вопрос задан
  • 45 просмотров
Решения вопроса 2
onepavel
@onepavel
Консультация и разработка мобильных приложений
1. Насколько помню, в java, не стоит так сравнивать строки
params[0]=="RUB"
для этого есть equals,
даже если это попытка сравнить по ссылкам
2. полагаю не в блокноте пишешь,
поставь брейкпоинт на первой строчке метода,
да пройдись посмотри что приходит в переменные
Ответ написан
Комментировать
@WaterSmith
Android-разработчик. Java, Kotlin
Как вам ответили выше, строки в JAVA нужно сравнивать методом equals
Что касается вашего кода то из-за неправильного сравнения у вас срабатывает только блок else:
5ebe384c83902370778483.jpeg
Чтобы исправить напишите:
if ("RUB".equals(params[0])) {
вместо:
if (params[0]=="RUB") {

А еще хорошо бы, в блоке else проверить Value1 и Value2 на null, кто знает, какая еще непредусмотренная хрень может прилететь в params[0] и params[1]
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы