gpt4 book ai didi

java - 在异步调用中更改变量

转载 作者:行者123 更新时间:2023-11-29 08:27:02 24 4
gpt4 key购买 nike

我正在尝试解析从我的 OkHttp3Connection 获得的 response,它总是几乎总是返回值 String” true" 在此示例中为 names[0]

现在我尝试将此字符串转换为 boolean 值并根据响应返回 true/false。现在我猜因为 OkHttp3Connection 需要一些时间它不会让查询完成并返回 false 这是默认值。

我想说的是,无论 String names[0] 是什么,这个函数总是返回 false

public boolean checkIfSongPurhcased(String songName){

final boolean[] songCheckResult = new boolean[1];

OkHttp3Connection.doOkHttp3Connection("", Services_Url_class.GET_SONG_PURCHASED, OkHttp3Connection.Request_type.POST, request_data, new OkHttp3Connection.OkHttp3RequestCallback() {
@Override
public void onSuccess(String result, String userTag) throws JSONException {
JSONObject jsonResult = new JSONObject(result);
JSONArray data = jsonResult.getJSONArray("data");
if(data != null) {
String[] names = new String[data.length()];
for(int i = 0 ; i < data.length() ; i++) {
JSONArray arr = data.getJSONArray(i);
JSONObject dataObj = arr.getJSONObject(0);
Iterator<String> keys = dataObj.keys();
names[i] = dataObj.getString(keys.next());
}

//names[0] is "true"
songCheckResult[0] = Boolean.parseBoolean(names[0]);
}
}
@Override
public void onError(String error, String userTag) {
System.out.println("songy" + error);
}
}
);

//always returns false
return songCheckResult[0];

如果 names[0] 为“true”,我该如何做到这一点,它会给我 true。

最佳答案

您应该传递监听器/回调。

首先创建如下回调接口(interface)

public interface OnQueryResultCallback{
void onQueryResult(String songName, boolean status);
}

然后将监听/回调传递给你的方法,这里是修改后的方法。

public void checkIfSongPurhcased(final String songName, final OnQueryResultCallback listener){
OkHttp3Connection.doOkHttp3Connection("", Services_Url_class.GET_SONG_PURCHASED, OkHttp3Connection.Request_type.POST, request_data, new OkHttp3Connection.OkHttp3RequestCallback() {
@Override
public void onSuccess(String result, String userTag) throws JSONException {
JSONObject jsonResult = new JSONObject(result);
JSONArray data = jsonResult.getJSONArray("data");
if(data != null) {
String[] names = new String[data.length()];
for(int i = 0 ; i < data.length() ; i++) {
JSONArray arr = data.getJSONArray(i);
JSONObject dataObj = arr.getJSONObject(0);
Iterator<String> keys = dataObj.keys();
names[i] = dataObj.getString(keys.next());
}

//names[0] is "true"
boolean status = Boolean.parseBoolean(names[0]);
listener.onQueryResult(songName,status);
}
}
@Override
public void onError(String error, String userTag) {
System.out.println("songy" + error);
listener.onQueryResult(songName,false);
}
}
);
}

然后像下面这样调用 checkIfSongPurhcased

checkIfSongPurhcased("songName", new OnQueryResultCallback(){
public void onQueryResult(String songName, boolean status){
if(status){
// do something on success
}else{
// do something on failure
}
}
});

关于java - 在异步调用中更改变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51882428/

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