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

标签 java android boolean okhttp

我正在尝试解析从我的 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/

相关文章:

java - android.view.InflateException : Binary XML file line #13: Error inflating class android. widget.TextView

java - Glassfish 3.1.1 重新部署时出错

android - 在它们之间有分隔线的 TextView

java - 在 jar 中找不到文件异常

java - MongoDB Spring Data 如何聚合多个字段的计数?

java - 设置布局宽度占屏幕总宽度的百分比

android - 动态壁纸预览缩略图大小

java - java中的Boolean.valueOf(String)和BooleanUtils.toBoolean(String)?

C# boolean 值大小写

c++ - C++ 中的伊辛模型