You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

异步任务返回值处理:将无返回值JSON请求方法改为返回布尔值

解决异步请求返回布尔值给Activity的问题

嘿,这个问题我熟!因为网络请求是异步执行的,你没法直接让getData()返回布尔值——方法会在请求还没完成的时候就先返回了,根本拿不到正确的结果。正确的做法是用回调接口来把结果传递回Activity,我给你一步步改:

1. 定义回调接口

首先我们需要一个接口来传递请求结果,让Activity实现这个接口就能拿到布尔值:

public interface OnDataFetchListener {
    void onDataFetchResult(boolean isSuccess);
}

2. 修改Async类的getData方法

把原来的void方法改成接收回调接口作为参数,然后在网络请求的回调里触发这个接口的方法:

public class Async extends AbstractService {
    // 把getData改成带回调参数的方法
    public void getData(final Context context, final OnDataFetchListener listener) {
        JSONObject param = new JSONObject();
        try {
            param.put("field_1", "1");
            param.put("field_2", "2"); // 注意你原来的代码里重复put了field_3,我改成field_2了
            param.put("field_3", "3");
        } catch (Exception e) {
            e.printStackTrace();
            // 如果参数构建失败,直接回调失败
            if (listener != null) {
                listener.onDataFetchResult(false);
            }
            return;
        }

        requester = new HttpRequestController().sendPost("auth/device", param, new HttpRequestController.CallBack() {
            @Override
            public void onSuccess(JSONObject response) {
                // 这里根据你的业务逻辑判断请求是否成功,比如检查返回码
                boolean isSuccess = true; // 替换成你的实际判断逻辑
                if (listener != null) {
                    listener.onDataFetchResult(isSuccess);
                }
            }

            @Override
            public void onFailure(IOException e) {
                e.printStackTrace();
                if (listener != null) {
                    listener.onDataFetchResult(false);
                }
            }
        });
    }
}

3. 在Activity中调用并接收结果

让你的Activity实现OnDataFetchListener接口,然后调用getData()时传入this:

public class YourActivity extends AppCompatActivity implements OnDataFetchListener {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.your_layout);

        // 调用Async的getData方法
        new Async().getData(this, this);
    }

    @Override
    public void onDataFetchResult(boolean isSuccess) {
        // 这里拿到布尔值,做你需要的操作
        if (isSuccess) {
            // 请求成功的逻辑
        } else {
            // 请求失败的逻辑
        }
    }
}

补充说明

  • 记得在网络请求的onSuccess里根据实际返回的JSON数据判断请求是否真正成功(比如检查返回的code字段),不要直接返回true。
  • 要处理listener为空的情况,避免空指针异常。
  • 原来的代码里重复put了field_3,我改成了field_2,你可以根据实际需求调整。

内容的提问来源于stack exchange,提问作者Alexandre C. do Carmo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 03:59:29