Response не отдаёт данные в другой класс

166
01 марта 2022, 12:10
public class AllPrices {
    private String price;
    public AllPrices(Context context, String userLevel) {
        getPricesForAmortizators(context, userLevel);
    }
    public void getPricesForAmortizators(Context context, final String userLevel){
        //final String number = artNumber.replaceAll("[^A-Za-z0-9]", ""); // удалится все кроме букв и цифр;
        final String number = "82501004";
        final StringRequest stringRequest = new StringRequest(Request.Method.POST, Config.PRICE_URL,
                new Response.Listener<String>() {
                    @Override
                    public void onResponse(String response){
                        try {
                            JSONObject src = new JSONObject(response);
                            JSONArray prices = src.getJSONArray("prices");
                           setPrice(getAmortPrices(prices));
                           System.out.println("1111111111111111111" + "   " + getPrice());
                        } catch (JSONException e) {
                            e.printStackTrace();
                        }
                    }
                },
                new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError error) {
                    }
                }) {
            @Override
            protected Map<String, String> getParams()
            {
                Map<String, String>  params = new HashMap<>();
                params.put("number", number);
                params.put("userLevel", userLevel);
                return params;
            }
        };
        RequestQueue queue = VolleyRequestHelper.getInstance(context).getRequestQueue();
        VolleyRequestHelper.getInstance(context).addToRequestQueue(stringRequest);
    }
    private String getAmortPrices(JSONArray prices){
        try {
            return prices.getJSONObject(0).getString("price");
        } catch (JSONException e) {
            e.printStackTrace();
        }
        return null;
    }
    public String getPrice() {
        return price;
    }
    public void setPrice(String price) {
        this.price = price;
    }
}

что я делаю не так, не могу получить в другом классе вот это

price_euro.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (user.getLevel().length() > 2){
                    AllPrices allprice = new AllPrices(context, user.getLevel());
                    String price = allprice.getPrice();}

получаю NULL ответ приходит сто процентов в AllPrices, проверил элементарным System.out.println("1111111111111111111" + " " + getPrice());, но я его не вижу в другом классе

Answer 1

Загрузка данных из сервера происходит в другом потоке, поэтому вам нужно написать callback для получение результата при успешном завершении запроса

На пример

interface Callback {
       void onDone(AllPrices prices);
    }
void getPrices(Callback callback) {
.....
//Вставьте в параметр то что вы получили
callback(...)
}
Answer 2

Вобщем решил я поступить так... Всеравно мне нужен результат этого запроса вывести в Toast.. поэтому я перенёс реализацию его в onResponce

price_euro.setOnClickListener(v -> {
            if (user.getLevel().length() > 2){
                AllPrices ap = new AllPrices();
                ap.getPricesForAmortizators(context, user.getLevel(), art_number.getText().toString());
            }
        });

а остальное в другом классе. Всё работает как и хотел!

READ ALSO
Как запретить поворот экрана при сканировании штрих кода?

Как запретить поворот экрана при сканировании штрих кода?

Использую библиотеку ZXing для распознавания кодовПри сканировании экран переворачивается в горизонтальный

128
Интерфейс с шифром Цезаря Java

Интерфейс с шифром Цезаря Java

Помогите решить задачкуЕсть рабочий код шифра Цезаря, есть написанный интерфейс, не могу все это совместить в одно

83
Java RMI не работает в интернете

Java RMI не работает в интернете

Я только пробую работать с RMIЗапускаю клиент и сервер на разных компьютерах

135
Построение DSM матрицы для Jar-файлов

Построение DSM матрицы для Jar-файлов

Мне нужно построить матрицу DSM-матрицу для Jar файлов (DSMForJars)

189