java - 如何在 onClickListener 事件上第一次计算变量的值?

标签 java android android-asynctask onclicklistener

我有一个操作,其中变量的值在以下过程中发生变化。下面的代码展示了这个操作。

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运算中计算了[percent = 0],但是当我第二次点击按钮时,变量price使用新的 percent 计算值。

输出Log cat第一次和第二次点击分别显示如下:

08-28 00:45:04.589 28467-28467/? E/Success >>: 125000

08-28 00:45:11.425 28467-28467/? E/Success >>: 16000

问题是:我如何计算 price 的值与新的percent第一次值?

最佳答案

与您是第一次还是第二次单击该按钮没有关系。 问题是您尝试直接从 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");
    }
});

关于java - 如何在 onClickListener 事件上第一次计算变量的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52073154/

相关文章:

java - 当服务在后台工作时,AsyncTask 的 doInBackground 从未被调用

java - 但是,第一个 Asynctask 可以工作,第二个 Asynctask 在按下按钮时不起作用

java - 在java中,如何在线程中获取文件名

Android Gradle 产品 flavor 在子库中失败

android - 如何为android中的每个联系人/人发送短信确认?

java - ArrayIndexOutOfBound 异常

java - 安卓/Eclipse : How to create a new project without appcompat_v7

java - 扫雷机清点地雷不起作用

java - 更新 ListView 时如何更新 ListView 项目位置

android - 显示 AlertDialog 的异步任务