美文网首页
网络请求返回空值处理

网络请求返回空值处理

作者: 高思阳 | 来源:发表于2019-07-17 15:09 被阅读0次

iOS开发中经常会遇到空指针的问题。如从后台传回来的Json数据,程序中不做判断就直接赋值操作,很有可能出现崩溃闪退。为了解决空指针的问题,治标的方法就是遇到一个处理一个。这样业务代码里面就插了很多判断语句,费时又费力。现在有一个简单的办法。
利用AFNetworking网络请求框架获取数据。

AFHTTPRequestOperationManager *instance = [AFHTTPRequestOperationManager manager];
AFJSONResponseSerializer *response = (AFJSONResponseSerializer *)instance.responseSerializer;
 
//添加这一句,移除所有的空值对象
response.removesKeysWithNullValues = YES;
 
response.acceptableContentTypes = [NSSet setWithObjects:@"text/json",@"application/json",@"text/html", nil];

这样就可以删除掉含有null指针的key-value。

但有时候,我们想保留key,以便查看返回的字段有哪些。没关系,我们进入到这个框架的AFURLResponseSerialization.m类里,利用搜索功能定位到AFJSONObjectByRemovingKeysWithNullValues,改造如下:

static id AFJSONObjectByRemovingKeysWithNullValues(id JSONObject, NSJSONReadingOptions readingOptions) {
    if ([JSONObject isKindOfClass:[NSArray class]]) {
        NSMutableArray *mutableArray = [NSMutableArray arrayWithCapacity:[(NSArray *)JSONObject count]];
        for (id value in (NSArray *)JSONObject) {
            [mutableArray addObject:AFJSONObjectByRemovingKeysWithNullValues(value, readingOptions)];
        }

        return (readingOptions & NSJSONReadingMutableContainers) ? mutableArray : [NSArray arrayWithArray:mutableArray];
    } else if ([JSONObject isKindOfClass:[NSDictionary class]]) {
        NSMutableDictionary *mutableDictionary = [NSMutableDictionary dictionaryWithDictionary:JSONObject];
        for (id <NSCopying> key in [(NSDictionary *)JSONObject allKeys]) {
            id value = (NSDictionary *)JSONObject[key];
            if (!value || [value isEqual:[NSNull null]]) {
                //这里原本是这样写的
                //[mutableDictionary removeObjectForKey:key];
                //下面的是我们改动的
                mutableDictionary[key] = @"";
            } else if ([value isKindOfClass:[NSArray class]] || [value isKindOfClass:[NSDictionary class]]) {
                mutableDictionary[key] = AFJSONObjectByRemovingKeysWithNullValues(value, readingOptions);
            }
        }

        return (readingOptions & NSJSONReadingMutableContainers) ? mutableDictionary : [NSDictionary dictionaryWithDictionary:mutableDictionary];
    }

    return JSONObject;
}

相关文章

  • 网络请求返回空值处理

    iOS开发中经常会遇到空指针的问题。如从后台传回来的Json数据,程序中不做判断就直接赋值操作,很有可能出现崩溃闪...

  • iOS-处理网络请求返回空

    当网络请求返回null,然后对数据进行操作就会导致崩溃, 因为NSNull不是字符串,也不是nil,只有一个方法 ...

  • 服务器返回空,怎么判断?

    请求网络连接常常返回空值:有的是(null) 而有的是 怎样判断这两种情况呢? 如果返回值为(null...

  • rxjava2 map返回值空处理

    最近的项目升级,将rxjava版本由1.x升级到2.x。这期间遇到一个问题,就是map返回空值。 正常的网络请求,...

  • 4.处理网络请求URLRequest

    三个类:NetworkRequest处理网络请求,JSONParse处理数据转化,JSONRequest请求网络数...

  • ionic 爬坑姿势指南

    infiniteScroll中发起返回空数据的无效的网络请求,会给服务器带来压力 event.js:183thro...

  • vue_axios请求封装、异常拦截统一处理

    1、前端网络请求封装、异常统一处理 vue中采用axios处理网络请求,避免请求接口重复代码,以及各种网络情况造成...

  • 处理结果值与结果值的处理

    在应用程序中,经常会获取到一个结果值,然后对结果值进行处理。比如:网络请求结束后获取一个结果值,再讲这个结果值进行...

  • Android 通用流行框架大全

    *** 缓存*** *** 图片加载*** *** 图片处理*** *** 网络请求*** *** 网络解析***...

  • 网络编程和数据处理

    网络编程 主要是学会如何请求网络数据,基本使用Java中的方法。(网络请求必须异步处理) 数据处理 XML格式SA...

网友评论

      本文标题:网络请求返回空值处理

      本文链接:https://www.haomeiwen.com/subject/ipgqlctx.html