Как можно рассчитать значение переменной в первый раз по событию onClickListener? - PullRequest
0 голосов
/ 29 августа 2018

У меня есть операция, в которой значение переменной изменяется во время следующего процесса. Следующий код показывает эту операцию.

private long checkOffCode(String pChode) {
    final long[] percent = {0};
    APIGettingPosts apiGettingPosts = new APIGettingPosts(MainActivity.this, "get_off_code.php");
    apiGettingPosts.getOffCode(new APIGettingPosts.OnOffCodeReceived() {
        @Override
        public void onReceived(List<Posts> posts) {
            if (posts == null || posts.isEmpty()) {
                // There is no value on sever...
            } else {
                for (int i = 0; i < posts.size(); ++i) {

                    // If the code in serve is equal with pCode],
                    // change the price value....

                    if (pChode.equals(posts.get(i).getCode())) {
                        percent[0] = Long.valueOf(posts.get(i).getPercent());
                    }
                }
            }
        }
    });

    return percent[0];
}

Функция checkOffCode получает код и возвращает переменную с именем percent, если ее значение равно значению, хранящемуся на сервере.

В случае setOnClickListener кнопки btnPurchase вызывается это значение, и по его значению вычисляется переменная price. Код для этого раздела выглядит следующим образом:

btnPurchase.setOnClickListener(new View.OnClickListener(){
    long percent = 0;
    @Override
    public void onClick (View view){

    percent = checkOffCode("MYCODE");
    if (percent != 0) {
        // update price value...
        price = price - price * percent / 100;
        Log.e("Success >>", String.valueOf(price));
    } else {
        Log.e("Failure >>", String.valueOf(price));
    }
}
});

Проблема в том, что когда я нажимаю кнопку btnPurchase в первый раз, предыдущее значение percent [процент = 0] вычисляется в операции, но когда я нажимаю на кнопку во второй раз переменная price вычисляется с новым значением percent.

Вывод Log cat отображается как в первом, так и во втором щелчках соответственно, следующим образом:

08-28 00: 45: 04.589 28467-28467 /? E / Успех >>: 125000

08-28 00: 45: 11,425 28467-28467 /? E / Успех >>: 16000

Вопрос: Как я могу вычислить значение price с новым значением percent в первый раз?

Ответы [ 2 ]

0 голосов
/ 29 августа 2018

Нет никакой связи с тем, нажимаете ли вы кнопку первый или второй раз. Проблема в том, что вы пытаетесь получить возвращаемое значение из checkOffCode напрямую, не будучи уверенным в том, что onReceived был вызван. Вы можете изменить код следующим образом:

private void checkOffCode(String pChode) {
    final long[] percent = {0};
    APIGettingPosts apiGettingPosts = new APIGettingPosts(MainActivity.this, "get_off_code.php");
    apiGettingPosts.getOffCode(new APIGettingPosts.OnOffCodeReceived() {
        @Override
        public void onReceived(List<Posts> posts) {
            if (posts == null || posts.isEmpty()) {
                // There is no value on sever...
            } else {
                for (int i = 0; i < posts.size(); ++i) {

                    // If the code in serve is equal with pCode],
                    // change the price value....

                    if (pChode.equals(posts.get(i).getCode())) {
                        percent[0] = Long.valueOf(posts.get(i).getPercent());
                    }
                }
            }
            if (percent[0] != 0) {
                // update price value...
                price = price - price * percent[0] / 100;
                Log.e("Success >>", String.valueOf(price));
            } else {
                Log.e("Failure >>", String.valueOf(price));
            }
        }
    });
}

btnPurchase.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        checkOffCode("MYCODE");
    }
});
0 голосов
/ 29 августа 2018

Вы можете попробовать добавить логическое значение, которое при первом щелчке рассчитывает цену, поэтому, если вы нажмете снова во второй раз, вычисление не сработает. Вот пример:

Сначала создайте логическую переменную вне функции onClick:

private Boolean isFirstClicked = false;

Затем измените функцию onClick:

if (!isFirstClicked) {
    // update price value...
    isFirstClicked = true
    price = price - price * percent / 100;
    Log.e("Success >>", String.valueOf(price));
} else {
    Log.e("Failure >>", String.valueOf(price));
}
...