tsoftwaretsoftware 2021-10-24 17:55 采纳率: 50%
浏览 22

请求网络接口出错:android.os.NetworkOnMainThreadException

调试了好久,才发现是因为Http请求写在了主线程里,在4.0之后在主线程里面执行Http请求都会报这个错,大概是怕Http请求时间太长造成程序假死的情况吧。

//于是我改写了函数,在函数里面创建了线程调用网络请求,但函数return值返回是空的,估计是线程还未执行完就返回了,我是一名android初学者,想请教一下各位,怎样改写下面这个函数,我想在程序其它地方直接调用 GetJSonData(),就得到我想要的返回结果。

public String GetJSonData() {
            String responseJSON = "";
    new Thread(new Runnable() {
        @Override
        public void run() {
            responseJSON =  TO DO http request.
        }
    }).start();
    return responseJSON;
     }
  • 写回答

4条回答 默认 最新

  • Fighting Horse 音视频领域新星创作者 2021-10-24 18:24
    关注

    你的分析是对的,这里需要异步返回。线程内完成后,给ui线程post一个event。new Handler(Looper.mainLooper()).postRunnable(...)

    评论

报告相同问题?

问题事件

  • 创建了问题 10月24日

悬赏问题

  • ¥15 Vue3 大型图片数据拖动排序
  • ¥15 划分vlan后不通了
  • ¥15 GDI处理通道视频时总是带有白色锯齿
  • ¥20 用雷电模拟器安装百达屋apk一直闪退
  • ¥15 算能科技20240506咨询(拒绝大模型回答)
  • ¥15 自适应 AR 模型 参数估计Matlab程序
  • ¥100 角动量包络面如何用MATLAB绘制
  • ¥15 merge函数占用内存过大
  • ¥15 使用EMD去噪处理RML2016数据集时候的原理
  • ¥15 神经网络预测均方误差很小 但是图像上看着差别太大