我有一个操作,其中变量的值在以下过程中发生变化。下面的代码展示了这个操作。
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
第一次和第二次点击分别显示如下:
block 引用>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/