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

如何在Java安卓开发中从callback回调返回String类型的值

问题原因

你拿到null是因为你的网络请求是异步执行的:调用getCurrentDate之后,主线程不会等待后台网络请求完成,会直接返回currentDate的初始空值,直到网络请求成功后onSuccess才会被调用,此时再给currentDate赋值已经晚于return语句的执行了。

正确实现方案

Android中异步任务的结果不能直接用同步返回的方式获取,你只需要把要使用这个日期的业务逻辑,直接放到onSuccess回调中执行即可,onPostExecute本身就是运行在主线程的,所以onSuccess回调也默认在主线程触发,完全符合你的使用需求:

// 不要写同步返回值的getDate方法,直接在需要加载日期的地方调用这个方法
private void loadDate() {
    InternetDate internetDate = new InternetDate(this);
    internetDate.getCurrentDate(new InternetDate.OnGetDate() {
        @Override
        public void onSuccess(String date) {
            // 这里已经是主线程,直接用date做你要做的操作即可
            // 示例:给页面TextView赋值
            // dateText.setText("当前服务器时间:" + date);
        }
    });
}

额外注意事项

  • 绝对不要为了同步返回值而阻塞主线程等待网络请求完成,会导致页面卡顿甚至触发ANR(应用无响应)报错
  • 你现有代码的InternetDate类里,setDateAndTimeFormat方法用到的mDateAndTimeFormat变量没有定义,需要补充成员变量private String mDateAndTimeFormat;否则会编译错误
  • 异常捕获的逻辑最好加个兜底回调,比如在OnGetDate接口里加个onError(String error)方法,请求失败的时候通知调用方处理异常场景

内容的提问来源于stack exchange,提问作者Kumar Santanu

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 18:57:00