请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

The getter 'data' was called on null.

Future fire(BaseRequest request) async {
    HiNetResponse response;
    var error;
    try {
      response = await send(request);
    } on HiNetError catch (e) {
      error = e;
      response = e.data;
      printLog(e.message);
    } catch (e) {
      error = e;
      printLog(e);
    }

    if (response == null) {
      printLog(error);
    }
    var result = response.data;
    printLog(result);

    var status = response.statusCode;
    switch (status) {
      case 200:
        return result;
        break;
      case 401:
        throw NeedLogin();
        break;
      case 403:
        throw NeedAuth(result.toString(), data: result);
        break;
      default:
        throw HiNetError(status, result.toString(), data: result);
        break;
    }
  }

图片描述

fire方法中无网络的时候报上面的错. 问答区你说对response做一下保护是什么意思?

正在回答

3回答

CrazyCodeBoy 2021-05-10 15:36:30

在DioAdapter中加下response为空的保护:

 ///构建HiNetResponse
  return HiNetResponse(
      data: response?.data,//?.防止response为空
      request: request,
      statusCode: response?.statusCode,
      statusMessage: response?.statusMessage,
      extra: response);

在HiNet的fire方法中如果error不为空,则复用现有的error,具体修改是在default代码下将:

HiNetError(status, result.toString(), data: result);
//改为
error ?? HiNetError(status, result.toString(), data: result);


2 回复 有任何疑惑可以回复我~
幕布斯3108837 2021-09-01 17:57:09

111

0 回复 有任何疑惑可以回复我~
幕布斯3108837 2021-06-13 10:01:07

对打阿萨德

0 回复 有任何疑惑可以回复我~
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信