gpt4 book ai didi

java - 在回调外部更新变量

转载 作者:行者123 更新时间:2023-12-01 11:22:36 26 4
gpt4 key购买 nike

我正在使用 Android 版 facebook SDK。我有一个请求,它有一个从我得到响应的回调。我必须根据从请求获得的响应来执行请求不同的次数。我试图在回调函数之外使用全局变量并使用响应更新它,但它不起作用。这是我解决这个问题的方法。

全局变量:

int dataLength = -1;

持续执行请求:

while (dataLength == -1){
getComments("20");
}

问题在于 dataLength 似乎从未更新过,尽管它应该在第一次调用时更新

请求和回调函数:

public void getComments(String offset){
GraphRequest request = GraphRequest.newGraphPathRequest(AccessToken.getCurrentAccessToken(), "/me/inbox",
new GraphRequest.Callback() {
@Override
public void onCompleted(GraphResponse graphResponse) {
dataLength = graphResponse.getJSONObject().getJSONArray("data").length;
}
});
Bundle parameters = new Bundle();
parameters.putString("limit", "20");
parameters.putString("offset", offset);
request.setParameters(parameters);
request.executeAsync();
}

最佳答案

一个问题是 while 循环和异步回调在单独的线程中运行,因此如果没有某种同步,就无法保证读取一个线程中写入的 dataLength 值在另一个。 (参见"Memory Consistency Errors" in the Java Tutorials。)

解决该问题的最简单方法是添加 volatile 关键字:

private volatile int dataLength = -1;

这可确保每次读取 dataLength 时都会检索最新写入的值。

关于java - 在回调外部更新变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31066671/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com