iOS开发之配置POST网络请求

2023-05-16

本文主要是讲一下我们在请求网络的时候如何去配置相关的参数然后成功得到响应。那本文以请求百度的API中图像识别为例来说一下该如何去配置。

目的需求

我需要把一张包含二维码的图片通过百度的图像识别接口来判定是否包含二维码。

准备工作

1>装有Xcode的MAC电脑一台
2>准备一张二维码图片,这个随便找一张,或者去草料二维码制作一张也是OK的
3>百度云登录注册,并创建一个图像识别应用,拿到API Key和Secret Key
4>百度对接文档:图像审核组合接口

开始对接

1>创建工程项目,然后创建一个网络请求。那么此处我选择AFN,并且是手动导入框架。首先这个过程是要先通过API Key和Secret Key获取AccessToken,然后再通过AccessToken再将图片通过POST请求发送给百度鉴别,然后返回结果。

Snip20170812_28.png

 

获取AccessToken的代码:

 

- (void)viewDidLoad {
    [super viewDidLoad];
     
    [self addBtn];
}

- (void)addBtn{
    UIButton *btn = [[UIButton alloc]init];
    btn.frame = CGRectMake(0, 300, 200, 50);
    CGFloat btnCenterX = self.view.center.x;
    CGFloat btnCenterY = btn.frame.origin.y + btn.frame.size.height * 0.5;
    CGPoint btnCenter = CGPointMake(btnCenterX, btnCenterY);
    btn.center = btnCenter;
    btn.backgroundColor = [UIColor orangeColor];
    [self.view addSubview:btn];
    [btn setTitle:@"点我获取Token" forState:UIControlStateNormal];
    [btn addTarget:self action:@selector(didClickBtn) forControlEvents:UIControlEventTouchUpInside];
}

- (void)didClickBtn{
    [self getAccessToken];
}

- (void)getAccessToken{
    AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
    //一但用了这个返回的那个responseObject就是NSData,如果不用就是简单的
    //manager.responseSerializer = [AFHTTPResponseSerializer serializer];
    //manager.requestSerializer = [AFJSONRequestSerializer serializer];
    manager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/json", @"text/json", @"text/javascript", @"text/html",@"image/jpeg",@"text/plain", nil];
    NSDictionary *dict = @{
                           @"grant_type":@"client_credentials",
                           @"client_id":@"填写你的API Key",
                           @"client_secret":@"填写你的Secret Key"
                           };
    [manager POST:@"https://aip.baidubce.com/oauth/2.0/token" parameters:dict progress:nil success:
     ^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
         /*
         if ([responseObject isKindOfClass:[NSData class]]) {
             NSError *error;
             id object = [NSJSONSerialization JSONObjectWithData:responseObject options:0 error:&error];
             NSLog(@"%@",object);
         }
         if (![responseObject isKindOfClass:[NSDictionary class]]) {
             NSLog(@"不是想要的结果,应该是哪里出错了,请注意检查!");
             NSLog(@"responseObject = %@",responseObject);
             return;
         }
        */
         NSDictionary *dict = (NSDictionary *)responseObject;
         
         NSString *accessToken = dict[@"access_token"];
         _accessToken = dict[@"access_token"];
         NSLog(@"%@",accessToken);
         
         //调用判定二维码的接口
         [self getResultOfQRImageWithAFN1];
         //[self getResultOfQRImageWithAFN2];
         //[self getResultOfQRImageWithNSURLSession];
         
     } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
         NSLog(@"请求失败--%@",error);
     }];
}

PS :注意以下有一点要说一下
下面这句代码意思是得到的响应会序列化,何为序列化,序列化就是将其他的数据类型转成二进制,所以一旦我们加上了这句话,那么我们在接收响应的时候,就要反序列化,将二进制的NSData转成其他响应的数据类型

 

manager.responseSerializer = [AFHTTPResponseSerializer serializer];

2>获取AccessToken之后就需要去请求图像识别接口了

Snip20170812_26.png

Snip20170812_27.png

Snip20170812_29.png

 

首先请求是POST,我们再说下以下几个要点:
要点一:
参数中有URL参数,那么这个URL参数是直接拼接在URL后面的,这个要注意
要点二:
其中说到的Header表示的是我们传给百度接口的是内容Content-Type是Json格式的,并且是UTF-8编码格式的,所以这个要特别注意,很多请求失败可能是这些设置没有设置好才导致的application/json;charset=utf-8
要点三:
请求体应该怎么放,在AFN中如果是使用POST的URL方式的接口中的parameters这个参数其实就是请求体,并且这是id类型的,只要我们设置好请求的内容格式然后这个参数传入对应格式的内容即可

PS: 这里面就涉及到请求体,那怎么设置请求体呢在AFN中,有以下的三种方式:

方式一:

 

//这个是用Request方式
- (void)getResultOfQRImageWithAFN1{
    
    //由于是POST,将一些凭证如AccessToken之类的拼接在一起,这种叫URL参数,同GET一样
    NSString *urlString = @"https://aip.baidubce.com/api/v1/solution/direct/img_censor";
    NSString *newURLString = [NSString stringWithFormat:@"%@?access_token=%@?",urlString,_accessToken];
    NSURL *url = [NSURL URLWithString:newURLString];
    //创建请求request
    NSMutableURLRequest *request =[NSMutableURLRequest requestWithURL:url cachePolicy:0 timeoutInterval:30];
    //设置请求方式为POST
    request.HTTPMethod = @"POST";
    //设置请求内容格式
    [request setValue:@"application/json;charset=utf-8" forHTTPHeaderField:@"Content-Type"];
    //设置请求体参数
    NSString *base64String = [self base64EncodeImageWithName:@"qrcode"];
    NSArray *array = @[@"watermark"];
    NSDictionary *params = @{@"image":base64String,
                             @"scenes": array};
    //这是设置请求体,把参数放进请求体(这部分的参数也叫请求参数)
    NSString *paramJsonStr = [KODJsonService dictionaryToJson:params];
    NSLog(@"paramString = %@",paramJsonStr);
    NSData *data = [paramJsonStr dataUsingEncoding:NSUTF8StringEncoding];
    NSLog(@"data = %@",data);
    request.HTTPBody = [paramJsonStr dataUsingEncoding:NSUTF8StringEncoding];
    
    AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
    manager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/json", @"text/json", @"text/javascript", @"text/html",@"image/jpeg",@"text/plain", nil];
    [[manager dataTaskWithRequest:request completionHandler:^(NSURLResponse * _Nonnull response, id  _Nullable responseObject, NSError * _Nullable error) {
        NSLog(@"请求成功---%@---%@",responseObject,[responseObject class]);
        
        if (error) {
            NSLog(@"%@",error);
            return ;
        }
        NSDictionary *dict = (NSDictionary *)responseObject;
        //以下结构没做放空处理,只为了尽快看到效果,请大家自行处理下
        NSDictionary *resultDict = dict[@"result"];
        if (!resultDict) {
            NSLog(@"result没有值,很抱歉,估计错误了!");
            return;
        }
        NSDictionary *newDict = resultDict[@"watermark"];
        NSArray *resultArray = newDict[@"result"];
        for (NSDictionary *dict in resultArray) {
            if ([dict[@"type"] isEqualToString:@"QR code"]) {
                NSLog(@"这绝壁有一张二维码!!!");
            }
        }
    }] resume];
}

PS: 这种方式是用manager直接通过request的方式去请求而不是设置URL的方式,另外request是可以设置HTTPBody的,这样更加的清晰

方式二:

 

//这个是用URL方式的
- (void)getResultOfQRImageWithAFN2{

    AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
    //这句话加了之后返回的responseObject就是JSONData了,如果不加那就是正常的JSON可以直接转成字典然后操作
    manager.responseSerializer = [AFHTTPResponseSerializer serializer];
    manager.requestSerializer = [AFJSONRequestSerializer serializer];
    [manager.requestSerializer setValue:@"application/json;charset=utf-8" forHTTPHeaderField:@"Content-Type"];
    manager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/json", @"text/json", @"text/javascript", @"text/html",@"image/jpeg",@"text/plain", nil];
    NSString *urlString = @"https://aip.baidubce.com/api/v1/solution/direct/img_censor";
    NSString *newURLString = [NSString stringWithFormat:@"%@?access_token=%@?",urlString,_accessToken];
    
    NSString *base64String = [self base64EncodeImageWithName:@"qrcode"];
    NSArray *array = @[@"watermark"];
    NSDictionary *params = @{@"image":base64String,
                             @"scenes": array};
    
    [manager POST:newURLString parameters:params progress:nil success:
     ^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
         NSLog(@"请求成功---%@---%@",responseObject,[responseObject class]);
         NSLog(@"成功!!!");
         NSError *error;

         id object = [NSJSONSerialization JSONObjectWithData:responseObject options:0 error:&error];
         if ([object isKindOfClass:[NSDictionary class]]) {
             NSDictionary *response = (NSDictionary *)object;
             NSLog(@"%@",response);
             //以下结构没做放空处理
             NSDictionary *resultDict = response[@"result"];
             if (!resultDict) {
                 NSLog(@"result没有值,很抱歉,估计错误了!");
                 return;
             }
             NSDictionary *newDict = resultDict[@"watermark"];
             NSArray *resultArray = newDict[@"result"];
             for (NSDictionary *dict in resultArray) {
                 if ([dict[@"type"] isEqualToString:@"QR code"]) {
                     NSLog(@"这绝壁有一张二维码!!!");
                 }
             }
         }
     } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
         NSLog(@"请求失败--%@",error);
     }];
}

PS: 大家要注意一下以下这两句代码的作用,第一句是设置请求上传内容是Json格式的,我试了以下如果单单设置第二句是会返回400Bad Request错误的,如果仅仅设置第一句是OK的

 

manager.requestSerializer = [AFJSONRequestSerializer serializer];
    [manager.requestSerializer setValue:@"application/json;charset=utf-8" forHTTPHeaderField:@"Content-Type"];

我看了下AFN的内部实现其实已经设置好了,大家有兴趣可以去查看一下AFN的内部源码

 

+ (instancetype)serializer {
    return [self serializerWithWritingOptions:(NSJSONWritingOptions)0];
}

+ (instancetype)serializerWithWritingOptions:(NSJSONWritingOptions)writingOptions
{
    AFJSONRequestSerializer *serializer = [[self alloc] init];
    serializer.writingOptions = writingOptions;

    return serializer;
}

最终都会调用

 

- (NSURLRequest *)requestBySerializingRequest:(NSURLRequest *)request
                               withParameters:(id)parameters
                                        error:(NSError *__autoreleasing *)error
{
    NSParameterAssert(request);

    if ([self.HTTPMethodsEncodingParametersInURI containsObject:[[request HTTPMethod] uppercaseString]]) {
        return [super requestBySerializingRequest:request withParameters:parameters error:error];
    }

    NSMutableURLRequest *mutableRequest = [request mutableCopy];

    [self.HTTPRequestHeaders enumerateKeysAndObjectsUsingBlock:^(id field, id value, BOOL * __unused stop) {
        if (![request valueForHTTPHeaderField:field]) {
            [mutableRequest setValue:value forHTTPHeaderField:field];
        }
    }];

    if (parameters) {
        if (![mutableRequest valueForHTTPHeaderField:@"Content-Type"]) {
            [mutableRequest setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
        }

        [mutableRequest setHTTPBody:[NSJSONSerialization dataWithJSONObject:parameters options:self.writingOptions error:error]];
    }

    return mutableRequest;
}

所以看到这里你会发现AFN封装了好大一圈,一会儿在文末贴出纯系统NSURLSession怎么实现

另外有两个AFHTTPRequestSerializer的子类,一个是AFJSONRequestSerializer,这个是会把参数编码成Json格式,然后设置Content-Type为application/json,但是并没有进行UTF-8编码,所以这个还是要注意一下自己编码

 

/**
 `AFJSONRequestSerializer` is a subclass of `AFHTTPRequestSerializer` that encodes parameters as JSON using `NSJSONSerialization`, setting the `Content-Type` of the encoded request to `application/json`.
 */
@interface AFJSONRequestSerializer : AFHTTPRequestSerializer

另一个是AFPropertyListRequestSerializer,这个可以猜一下,其实就是XML,并且设置为application/x-plist

 

/**
 `AFPropertyListRequestSerializer` is a subclass of `AFHTTPRequestSerializer` that encodes parameters as JSON using `NSPropertyListSerializer`, setting the `Content-Type` of the encoded request to `application/x-plist`.
 */
@interface AFPropertyListRequestSerializer : AFHTTPRequestSerializer

方式三:

 

- (void)getResultOfQRImageWithAFN3{
    
    AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
    //这句话加了之后返回的responseObject就是JSONData了,如果不加那就是正常的JSON可以直接转成字典然后操作
    //manager.responseSerializer = [AFHTTPResponseSerializer serializer];
    manager.requestSerializer = [AFJSONRequestSerializer serializer];
    [manager.requestSerializer setValue:@"application/json;charset=utf-8" forHTTPHeaderField:@"Content-Type"];
    manager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/json", @"text/json", @"text/javascript", @"text/html",@"image/jpeg",@"text/plain", nil];
    NSString *urlString = @"https://aip.baidubce.com/api/v1/solution/direct/img_censor";
    NSString *newURLString = [NSString stringWithFormat:@"%@?access_token=%@?",urlString,_accessToken];
    
    NSString *base64String = [self base64EncodeImageWithName:@"qrcode"];
    NSArray *array = @[@"watermark"];
    NSDictionary *params = @{@"image":base64String,
                             @"scenes": array};
    NSMutableURLRequest *request = [manager.requestSerializer requestWithMethod:@"POST" URLString:newURLString parameters:params error:nil];
    [[manager dataTaskWithRequest:request completionHandler:^(NSURLResponse * _Nonnull response, id  _Nullable responseObject, NSError * _Nullable error) {
        NSLog(@"%@",error);
        NSLog(@"%@",responseObject);
    }] resume];
}

对比原生NSURLSession的做法

 

-(void)getResultOfQRImageWithNSURLSession
{
    NSString *urlString = @"https://aip.baidubce.com/api/v1/solution/direct/img_censor";
    NSString *newURLString = [NSString stringWithFormat:@"%@?access_token=%@?",urlString,_accessToken];
    NSURL *url = [NSURL URLWithString:newURLString];
    NSMutableURLRequest *request =[NSMutableURLRequest requestWithURL:url cachePolicy:0 timeoutInterval:30];
    request.HTTPMethod = @"POST";
    [request setValue:@"application/json;charset=utf-8" forHTTPHeaderField:@"Content-Type"];
    NSString *base64String = [self base64EncodeImageWithName:@"qrcode"];
    NSArray *array = @[@"watermark"];
    NSDictionary *params = @{@"image":base64String,
                             @"scenes": array};
    NSString *paramJsonStr = [KODJsonService dictionaryToJson:params];
    NSLog(@"paramString = %@",paramJsonStr);
    NSData *data = [paramJsonStr dataUsingEncoding:NSUTF8StringEncoding];
    NSLog(@"data = %@",data);
    request.HTTPBody = [paramJsonStr dataUsingEncoding:NSUTF8StringEncoding];
    
    // 3.获得会话对象
    NSURLSession *session = [NSURLSession sharedSession];
    // 4.根据会话对象,创建一个Task任务
    NSURLSessionDataTask *sessionDataTask = [session dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
        //判断statusCode
        NSHTTPURLResponse *res = (NSHTTPURLResponse *)response;
        if (!(res.statusCode == 200 || error)) {
            NSLog(@"失败!!!");
            return;
        }
        NSLog(@"从服务器获取到数据");
        if (error) {
            NSLog(@"error:%@",error.description);
            return ;
        }
        NSLog(@"%@",data);
        
        NSError *newError;
        id object = [NSJSONSerialization JSONObjectWithData:data options:0 error:&newError];
        if ([object isKindOfClass:[NSDictionary class]]) {
            NSDictionary *response = (NSDictionary *)object;
            NSLog(@"%@",response);
            //这里记得把这个值取出来,很深,哈哈哈...
        }
    }];
    //5.最后一步,执行任务,(一定调用这句话)
    [sessionDataTask resume];
}

附件

其中用到了一个私有方法:

 

- (NSString *)base64EncodeImageWithName:(NSString *)name{
    UIImage *image = [UIImage imageNamed:name];
    NSData *data = UIImagePNGRepresentation(image);
    NSData *base64Data = [data base64EncodedDataWithOptions:0];
    NSString *baseString = [[NSString alloc]initWithData:base64Data encoding:NSUTF8StringEncoding];
    
    return baseString;
}

 

//这是我的一个工具类里面的方法,大家可以改成对象方法直接替换调用即可
+ (NSString*)dictionaryToJson:(NSDictionary *)dic
{
    if (dic.allKeys.count == 0){
#ifdef DSDUBUG
        NSLog(@"%@---%s",self.class,__FUNCTION__);
        NSLog(@"您传入的字典为空,无法转换,请确保字典不为空!!!");
#endif
        return nil;
    }
    NSError *parseError = nil;
    NSData *jsonData = [NSJSONSerialization dataWithJSONObject:dic options:NSJSONWritingPrettyPrinted error:&parseError];
    return [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
}

图片:

qrcode.png

文末总结

其实今天就讲了一个很重要的问题,设置请求体,并且设置请求的内容格式的问题。另外一个是我们其实可以对系统的方法NSURLSession进行封装,系统的已经很好了,其实有时间的话我们可以针对于我们的业务自己封装会更好,因为AFN封装了一层又一层太绕了...

AFN中的如果是GET请求,用URL方式的那个接口中的parameters参数其实就是我们需要拼接在URL后面的参数,所以这个通常只需要转一下UTF-8就好
AFN中的如果是POST请求,用URL方式的那个接口中的parameters参数其实就是我们需要上传给后台的参数,因为要上传所以需要设置一下内容格式,一般上传是上传Json,也有上传Form表单数据的比如图片等等;另外这个URL参数就需要跟URL做一下拼接然后整体放置在以下接口中的newURLString:

 

[manager POST:newURLString parameters:params progress:nil success:
     ^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
//code here...
}];

以上!!!



作者:KODIE
链接:https://www.jianshu.com/p/8fa6c51ec05e
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

iOS开发之配置POST网络请求 的相关文章

  • 安全策略调整步骤

    1 修改防火墙 xff0c 保留22 SSHD 8081 APACHE 80 关闭端口443 HTTPS 3306 MYSQL 8080 8088 53 123 2 针对PHP的BUG和安全漏洞 xff0c 只有升级版本一途 xff0c 经
  • 获取微信openid(或昵称头像)的授权登录及其代理

    lt php 本页用于微信授权登录及其代理 64 version V2 0 64 author ty1921 lt ty1921 64 gmail com gt 64 param backurl 传get参数backurl xff0c 则授
  • 常用的PHP文件头和HTML5文件头(含移动端)

    lt php PHP Header Created by ty1921 64 gmail com Ver V1 Date 2017 8 18 1 session session start 2 display errors ini set
  • VB+PHP实现在线修改Windows服务器的配置文件

    本文仅供记录 存档备案用 用途 xff1a 某电话转接系统 xff0c 需要每天修改配置文件 并重启服务端程序 原理 xff1a WEB用于展示修改界面 xff0c 提交 保存配置文件的相关数据 VB端用于定时轮训WEB上保存的数据 xff
  • 按键精灵的5级开发认证,笔试题参考

    4题是抄的 xff0c 只是为了过级 最后得93分 xff0c 可能代码还是不够最优 xff0c 有看出的大大希望能不吝指点 1 写一个脚本 xff0c 要求启动时 xff0c 记录 xff08 录制 xff09 当前鼠标的移动轨迹 xff
  • Linux for Ubuntu用gdebi安装deb文件

    在bantu中安装deb文件有时很不方便 xff0c 通常默认用的安装器并效果并不理想 xff0c 有时用命令吧 xff0c 太多又繁琐 所以有个软件叫GDebi xff0c 可以更加有效的帮助安装deb 首先安装gdebi程序 xff0c
  • Xshell连接后又断开问题(Disconnected from remote host)

    Last login Fri Nov 1 12 36 08 2019 from 10 0 1 25 Connection closed by foreign host Disconnected from remote host 20 0 0
  • ubuntu-16.04.6安装教程

    下载Ubuntu16 04 xff08 1 xff09 下载地址 xff1a http releases ubuntu com 16 04 记得要下载iso文件如 ubuntu 16 04 desktop amd64 iso xff0c 3
  • Hive安装详细步骤

    一 下载hive 下载hive 地址 xff1a http mirror bit edu cn apache hive 二 安装mysql 执行以下几个命令安装8 0版本mysql 1 下载MySQLyum源 xff08 8 0版本的 xf
  • LL(1)文法的语法分析java实现

    java代码如下 xff1a package 文法分析器 import java io BufferedReader import java io FileInputStream import java io InputStreamRead
  • CSDN,我的良师益友

    鲁迅曾说过 xff1a 不是缺乏天才 xff0c 而是缺乏培养天才的土壤 对于中国的 IT 行业来说 xff0c 从来不缺乏技术英雄 xff0c 缺少的是铸就技术英雄的平台 而 CSDN 就给了我们这样一个平台和机会 xff0c 所以我们是
  • 构造中小型园区网实训案例

    构造中小型园区网实训案例 一 实验工具与实验拓扑规划1 实验工具2 实验拓扑 二 需求分析三 数据规划四 实施步骤步骤1 xff1a 配置所有终端步骤2 xff1a 配置所有接入层交换机步骤3 xff1a 配置网关路由器AR1 公网路由器A
  • 软件工程复习

    第一章 xff1a 课程概述 1 1 软件危机 1 1 1 计算机软件的四个发展阶段 程序设计阶段 程序系统阶段 软件工程阶段 面向对象阶段 1 1 2 什么是软件危机 xff08 考点 xff09 软件危机是指在计算机软件的开发和维护过程
  • ArrayDeque底层实现

    一 什么是ArrayDeque 1 Deque与Queue 了解这个之前 xff0c 我们要先知道什么是Deque xff0c 它和Queue有什么区别 xff1a 在java中 xff0c Queue被定义成单端队列使用 xff0c De
  • Hive知识点汇总

    HIVE 一 Hive的优化 数据倾斜 xff1a shuffle之后Key的分布不均导致分配到Reduce端的数据不均匀 xff0c 出现个别Reduce的数据过大 xff0c 执行时间过长而出现的现象 1 数据倾斜产生的原因 xff1a
  • CentOS7安装与克隆

    CentOS7安装与克隆 一 新建虚拟机及其配置二 配置虚拟网络编辑器三 安装CentOS 7四 一些工具的安装五 虚拟机克隆六 虚拟机克隆后的配置七 配置ssh免密登陆八 批处理脚本与集群分发脚本1 将家目录配置进环境变量2 批处理脚本3
  • NGINX ./configure详解

    在 34 configure 34 配置中 xff0c with 34 表示启用模块 xff0c 也就是说这些模块在编译时不会自动构建 without 34 表示禁用模块 xff0c 也就是说这些模块在编译时会自动构建 xff0c 若你想N
  • Linux下Nginx安装使用

    一 下载解压nginx span class token comment 进入要放安装包的目录 span span class token builtin class name cd span opt software span class
  • java Collections类 详解

    目录 一 前言 二 Collections类简介 三 Collections类常用方法演示 1 static void reverse List list 代码演示 2 static void shuffle List list 代码演示
  • Activity onNewIntent注意事项

    数据上报发现 xff0c onNewIntent 以后 xff0c onResume和onPause可能不会执行 xff0c 直接执行onStop

随机推荐

  • Python+OpenCV实用案例应用教程:人脸检测和识别

    计算机视觉使很多任务成为现实 xff0c 其中两项任务就是人脸检测 xff08 在图像中定位人脸 xff09 和人脸识别 xff08 将人脸识别为特定的人 xff09 OpenCV实现了一些人脸检测和识别的算法 从安全到娱乐 xff0c 这
  • 基数排序 详细讲解

    1 基数排序 桶排序 介绍 基数排序 xff08 radix sort xff09 属于 分配式排序 xff08 distribution sort xff09 xff0c 又称 桶子法 xff08 bucket sort xff09 或b
  • CentOS7安装docker后服务启动不了

    问题排查 运行yum install docker后 xff0c 安装完成docker 运行 docker info 命令测试docker是否正常 则提示以下错误 xff1a Cannot connect to the Docker dae
  • Linux命令+shell脚本大全:处理损坏的包依赖关系

    有时在安装多个软件包时 xff0c 某个包的软件依赖关系可能会被另一个包的安装覆盖掉 这叫作 损坏的包依赖关系 xff08 broken dependency xff09 如果系统出现了这个问题 xff0c 先试试下面的命令 xff1a y
  • 世界上最简单的无锁哈希表

    英文原文 xff1a preshing xff0c 感谢 64 浅水清流 的热心翻译 如果其他朋友也有不错的原创或译文 xff0c 可以尝试推荐给伯乐在线 以下是译文 无锁哈希表 xff08 Lock Free Hash Table xff
  • nginx ssl及http自动跳转到https配置

    1 Nginx路径配置 如下请求地址 http x x x x 8080 api base test 此时 zo java这个应用接收到的地址是 xff1a http x x x x 8080 api base test location
  • 视图绑定.

    在大多数情况下 xff0c 视图绑定会替代 findViewById 视图绑定功能可按模块启用 要在某个模块中启用视图绑定 xff0c 请将 viewBinding 元素添加到其 build gradle 文件中 xff0c 如下例所示 x
  • 优秀程序员的故事

    A君默默的工作了3年 xff0c 从项目初立 xff0c 到遍地开花 工作不忙 xff0c 工资没长 新领导来了 xff0c 下个版本重新开发 xff0c A君继续维护老版本 新招了一批人 xff0c 加班加点干了半年多 直到版本发布 xf
  • Synchronized锁

    1 Synchronized基本特性回顾 应用场景 xff1a 多线程环境下保证线程的安全性 使用方式 xff1a 1 xff09 Synchronized加在普通方法上 xff0c 使用的是this锁 xff0c 也就是当前对象 2 xf
  • HC-05无底板蓝牙模块连接51单片机,配置,安卓连接传输数据测试程序

    买个蓝牙模块以为是HC 06 xff0c 没有底板 xff0c 测试半天反应 xff0c 后面才发现是HC 05 xff0c HC 05和HC 06的测试方法稍有不同 一 HC 05蓝牙模块连线 先上一个自己的接线 xff08 有点丑 xf
  • java.io.StreamCorruptedException: invalid stream header: 异常

    使用java的对象流出现java io StreamCorruptedException invalid stream header异常 原因是数据发送端发送对象到接收端 接收端对于同一个输入流创建了不同的对象输入流 xff0c 而后用不同
  • insmod: ERROR: could not insert module xxxxx.ko: Unknown symbol in module

    有可能是该模块的相关依赖没有加载 先执行命令 xff1a modinfo xxxx ko 查看 depends xff1a 所依赖的模块 先加载依赖模块 xff0c 然后加载xxxx ko模块
  • Mondo Rescue ---FATALERROR--- Failed to generate boot+data disks

    使用Mondo Rescue制作CentOS7的IOS镜像的时候报错 Mindi failed to create your boot 43 data disks Fatal error Failed to generate boot 43
  • 【Git】常用命令commit提交,push推送,merge,添加分支branch

    一 常用操作 xff1a 1 添加跟踪文件 git add 或 git add A 根据ignore的配置 xff0c 添加跟踪文件 xff0c 其中的 或 A表示添加所有更改过的文件 2 查看状态 git status 3 提交到本地 x
  • Python项目打包成wheel笔记

    详情参考 xff1a https setuptools readthedocs io en latest setuptools html Python项目可以使用命名 pip install 包名 安装Python包 xff0c 可以将自己
  • CentOS 网桥配置,静态IP配置

    1 网桥配置 CentOS 网络配置文件在以下目录 ls etc sysconfig network scripts 假设配置文件为ifcfg enp1s0 cp etc sysconfig network scripts ifcfg en
  • UEFI启动,安装CentOS7报错tsc: Fast TSC calibration failed

    安装CentOS7系统报错 tsc Fast TSC calibration failed 多的不说 xff0c 选择Boot启动时有 USB SanDisk和UEFI xff1a SanDisk xff0c Partition 4 xff
  • Linux_Linux命令行提示符配置

    源址 xff1a http liuhongjiang github io hexotech 2013 01 16 shell prompting linux下shell提示符可以任意配置的 首先看看bash的配置文件 xff0c 一般在用户
  • Redis_RedisCluster set 方法跟踪纪要

    最近在使用 JedisCluster 时 对 集群模式下的 Redis key 的设置策略比较感兴趣 xff0c 跟踪了一下执行 set 方法的 主要源码 xff0c 特此记录一下 跟踪的源码版本 pom xml lt dependency
  • iOS开发之配置POST网络请求

    本文主要是讲一下我们在请求网络的时候如何去配置相关的参数然后成功得到响应 那本文以请求百度的API中图像识别为例来说一下该如何去配置 目的需求 我需要把一张包含二维码的图片通过百度的图像识别接口来判定是否包含二维码 准备工作 1 gt 装有