Замена AsyncTask в Android Java

Занимаюсь разработкой мобильного приложения для Android среда работы - Android Studio (Java). Мобильное приложение обращается к PHP скриптам, посредством HttpURLConnection GET & POST. Уже скрипты PHP работают с MySQL базой и возвращают JSON данные. Для операций в фоновом потоке использую AsyncTask. Но, обратил внимание, что Android Studio помечает AsyncTask как устаревший метод.

Вопрос. Чем заменить AsyncTask для HTTP GET & POST запросов на сервер.

Решения я нашёл на: https://stackoverflow.com/questions/58767733/android-asynctask-api-deprecating-in-android-11-what-are-the-alternatives

Предлагается использовать:

ExecutorService executor = Executors.newSingleThreadExecutor();
Handler handler = new Handler(Looper.getMainLooper());

executor.execute(new Runnable() {
    @Override
    public void run() {

        //Background work here

        handler.post(new Runnable() {
            @Override
            public void run() {
                //UI Thread work here
            }
        });
    }
});

Но как при такой реализации получать результат запроса и правильно апеллировать им?


Моя прежняя реализация для полного представления.

Пример AsyncTask

//region Class AsyncTask's

private class getVersionAppData extends AsyncTask<String, Void, String>
{
    @Override
    protected void onPreExecute()
    {
        super.onPreExecute();
    }

    @Override
    protected String doInBackground(String... strings)
    {
        Log.i("AppLog", "LoadingDataFragment - HTTP GET (send): " + strings[0]);

        String result = null;

        result = workingHTTP.perfomGetCall(strings[0]);

        return result;
    }

    @Override
    protected void onPostExecute(String result)
    {
        super.onPostExecute(result);

        Log.w("AppLog", "LoadingDataFragment - HTTP GET (receive): " + result);

        Gson gs = new Gson();

        try
        {
            DataLoadingResult(gs.fromJson(result, VersionApp.class));
        } catch (JsonSyntaxException e) {
            //TO-DO Json error
            workingAlertDialog.ShowError(e.getMessage(), () -> getActivity().finish());
        }
    }
}

//endregion class AsyncTask

Дополнительно. WorkingHTTP.perfomGetCall(String url).

public String perfomGetCall(String requestURL)
{
    URL url;
    HttpURLConnection urlConnection = null;
    String result = null;

    try {
        url = new URL(requestURL);
        urlConnection = (HttpURLConnection) url.openConnection();

        int responseCode = urlConnection.getResponseCode();

        if(responseCode == HttpURLConnection.HTTP_OK)
        {
            result = readStream(urlConnection.getInputStream());
        }

    } catch (MalformedURLException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }

    return result;
}

public String readStream(InputStream in)
{
    BufferedReader reader = null;
    StringBuffer response = new StringBuffer();
    try {
        reader = new BufferedReader(new InputStreamReader(in));
        String line = "";
        while ((line = reader.readLine()) != null) {
            response.append(line);
        }
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        if (reader != null) {
            try {
                reader.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    return response.toString();
}

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


Ответы (0 шт):