Приложение вылетает при использовании AsyncTask<> Android

97
08 марта 2022, 21:20

Пишу приложение на Android Studio конвертер валют, но столкнулся с проблемой. Приложение вылетает при нажатии на кнопку "рассчитать". Приложение парсит текущий курс с цб и конвертирует значение в доллары и евро. Не могли бы вы подсказать, что не так? Android Studio варнинги не показывает...

package com.example.converter;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.os.AsyncTask;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import java.io.IOException;
import android.view.View;
import android.widget.*;
public class MainActivity extends AppCompatActivity {
    TextView enterValue;
    TextView calculatedEuroValue;
    TextView calculatedDollarValue;
    TextView currentDollarValue;
    TextView currentEuroValue;
    Calculate calculate;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    enterValue = findViewById(R.id.converterText);
    calculatedEuroValue = findViewById(R.id.euroText);
    calculatedDollarValue = findViewById(R.id.dollarText);
    currentEuroValue = findViewById(R.id.currentEuroValue);
    currentDollarValue = findViewById(R.id.currentDollarValue);
}
public void CalculateButton(View v) {
    calculate = new Calculate();
    calculate.execute();
}
class Calculate extends AsyncTask<Void, Void, Void> {
    Document docDollar;
    Document docEuro;
    Element dollarValue;
    Element euroValue;
    String dollarValueOf;
    String euroValueOf;
    {
        dollarValueOf = "60";
        euroValueOf = "70";
    }
    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        currentDollarValue.setText(String.valueOf(dollarValueOf));
        currentEuroValue.setText(String.valueOf(euroValueOf));
    }
    @Override
    protected Void doInBackground(Void... params) {
        try {
            docDollar = Jsoup.connect("https://finance.rambler.ru/currencies/USD/?utm_medium=widget").get();
            dollarValue = docDollar.selectFirst("div.finance-currency-plate__currency");
            dollarValueOf = dollarValue.select("div.finance-currency-plate__currency").text();
            docEuro = Jsoup.connect("https://finance.rambler.ru/currencies/EUR/?utm_medium=widget").get();
            euroValue = docEuro.selectFirst("div.finance-currency-plate__currency");
            euroValueOf = euroValue.select("div.finance-currency-plate__currency").text();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }
    @Override
    protected void onPostExecute(Void result) {
        super.onPostExecute(result);
        currentDollarValue.setText(String.valueOf(dollarValueOf));
        currentEuroValue.setText(String.valueOf(euroValueOf));
        double tempEntered = Double.parseDouble(enterValue.toString());
        double tempDollar = Double.parseDouble(dollarValueOf);
        double tempEuro = Double.parseDouble(euroValueOf);
        double temp = tempEntered / tempEuro;
        calculatedEuroValue.setText(String.valueOf(temp));
        temp = tempEntered / tempDollar;
        calculatedEuroValue.setText(String.valueOf(temp));
    }
}

}

Лог ошибки

2020-01-23 15:36:38.346 31412-31412/com.example.converter E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.converter, PID: 31412
java.lang.NumberFormatException: For input string: "androidx.appcompat.widget.AppCompatTextView{2e8afa3 V.ED..... ........ 0,0-1239,102 #7f09004c app:id/converterText}"
    at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:2043)
    at sun.misc.FloatingDecimal.parseDouble(FloatingDecimal.java:110)
    at java.lang.Double.parseDouble(Double.java:538)
    at com.example.converter.MainActivity$Calculate.onPostExecute(MainActivity.java:82)
    at com.example.converter.MainActivity$Calculate.onPostExecute(MainActivity.java:41)
    at android.os.AsyncTask.finish(AsyncTask.java:696)
    at android.os.AsyncTask.access$600(AsyncTask.java:180)
    at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:713)
    at android.os.Handler.dispatchMessage(Handler.java:112)
    at android.os.Looper.loop(Looper.java:216)
    at android.app.ActivityThread.main(ActivityThread.java:7625)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:524)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:987)
Answer 1

java.lang.SecurityException: Permission denied (missing INTERNET permission?)

эта ошибка говорит о том что Вам нужны разрешения приложения на использование интернета

в AndroidManifest добавьте

<uses-permission android:name="android.permission.INTERNET" />
READ ALSO
Spring security

Spring security

при такой конфигурации всё работает, авторизация прохожу

212
Сортировка Map на Java

Сортировка Map на Java

Имеется Map и содержит такие данные

128
Пакетное выполнение sql запросов

Пакетное выполнение sql запросов

Добрый день друзья и подруги , помогите вставить addBatch()в данный код

128
ошибка при передаче JSON ответа в Java объект с помощью Jackson [закрыт]

ошибка при передаче JSON ответа в Java объект с помощью Jackson [закрыт]

Хотите улучшить этот вопрос? Обновите вопрос так, чтобы он вписывался в тематику Stack Overflow на русском

194