当前位置: 首页 > 编程日记 > 正文

AFN框架使用整理

1.AFN框架基本使用

  • 1 AFN内部结构 AFN结构体
    • NSURLConnection(iOS9.0废弃了)

      • AFURLConnectionOperation
      • AFHTTPRequestOperation
      • AFHTTPRequestOperationManager(封装了常用的 HTTP 方法)
        • 属性
          • baseURL :AFN建议开发者针对 AFHTTPRequestOperationManager 自定义个一个单例子类,设置 baseURL, 所有的网络访问,都只使用相对路径即可
          • requestSerializer :请求数据格式/默认是二进制的 HTTP
          • responseSerializer :响应的数据格式/默认是 JSON 格式
          • operationQueue
          • reachabilityManager :网络连接管理器
        • 方法
          • manager :方便创建管理器的类方法
          • HTTPRequestOperationWithRequest :在访问服务器时,如果要告诉服务器一些附加信息,都需要在 Request 中设置
          • GET
          • POST
    • NSURLSession

      • AFURLSessionManager
      • AFHTTPSessionManager(封装了常用的 HTTP 方法)
        • GET
        • POST
        • UIKit + AFNetworking 分类
        • NSProgress :利用KVO
    • 半自动的序列化&反序列化的功能

      • AFURLRequestSerialization :请求的数据格式/默认是二进制的
      • AFURLResponseSerialization :响应的数据格式/默认是JSON格式
    • 附加功能

      • 安全策略
        • HTTPS
        • AFSecurityPolicy
      • 网络检测
        • 对苹果的网络连接检测做了一个封装
        • AFNetworkReachabilityManager

建议: 可以学习下AFN对 UIKit 做了一些分类, 对自己能力提升是非常有帮助的

  • 2 AFN的基本使用 (1)发送GET请求的两种方式(POST同)
 -(void)get1 {//1.创建AFHTTPRequestOperationManager管理者//AFHTTPRequestOperationManager内部是基于NSURLConnection实现的AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];//2.发送请求/*http://120.25.226.186:32812/login?username=ee&pwd=ee&type=JSON第一个参数:NSString类型的请求路径,AFN内部会自动将该路径包装为一个url并创建请求对象第二个参数:请求参数,以字典的方式传递,AFN内部会判断当前是POST请求还是GET请求,以选择直接拼接还是转换为NSData放到请求体中传递第三个参数:请求成功之后回调Block第四个参数:请求失败回调Block*/NSDictionary *param = @{@"username":@"",@"pwd":@""};//注意:字符串中不能包含空格[manager GET:@"http://120.25.226.186:32812/login" parameters:param success:^(AFHTTPRequestOperation * _Nonnull operation, id  _Nonnull responseObject) {NSLog(@"请求成功---%@",responseObject);} failure:^(AFHTTPRequestOperation * _Nonnull operation, NSError * _Nonnull error) {NSLog(@"失败---%@",error);}];
}
复制代码
-(void)get2 {//1.创建AFHTTPSessionManager管理者//AFHTTPSessionManager内部是基于NSURLSession实现的AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];//2.发送请求NSDictionary *param = @{@"username":@"",@"pwd":@""};//注意:responseObject:请求成功返回的响应结果(AFN内部已经把响应体转换为OC对象,通常是字典或数组)[manager GET:@"http://120.25.226.186:32812/login" parameters:param success:^(NSURLSessionDataTask * _Nonnull task, id  _Nonnull responseObject) {NSLog(@"请求成功---%@",[responseObject class]);} failure:^(NSURLSessionDataTask * _Nonnull task, NSError * _Nonnull error) {NSLog(@"失败---%@",error);}];
}
复制代码

(2)使用AFN下载文件

-(void)download {//1.创建一个管理者AFHTTPSessionManager *manage  = [AFHTTPSessionManager manager];//2.下载文件/*第一个参数:请求对象第二个参数:下载进度第三个参数:block回调,需要返回一个url地址,用来告诉AFN下载文件的目标地址targetPath:AFN内部下载文件存储的地址,tmp文件夹下response:请求的响应头返回值:文件应该剪切到什么地方第四个参数:block回调,当文件下载完成之后调用response:响应头filePath:文件存储在沙盒的地址 == 第三个参数中block的返回值error:错误信息*///2.1 创建请求对象NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://120.25.226.186:32812/resources/images/minion_02.png"]];//2.2 创建下载进度,并监听NSProgress *progress = nil;NSURLSessionDownloadTask *downloadTask = [manage downloadTaskWithRequest:request progress:&progress destination:^NSURL * _Nonnull(NSURL * _Nonnull targetPath, NSURLResponse * _Nonnull response) {NSString *caches = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject];//拼接文件全路径NSString *fullpath = [caches stringByAppendingPathComponent:response.suggestedFilename];NSURL *filePathUrl = [NSURL fileURLWithPath:fullpath];return filePathUrl;} completionHandler:^(NSURLResponse * _Nonnull response, NSURL * _Nonnull filePath, NSError * _Nonnull error) {NSLog(@"文件下载完毕---%@",filePath);}];//2.3 使用KVO监听下载进度[progress addObserver:self forKeyPath:@"completedUnitCount" options:NSKeyValueObservingOptionNew context:nil];//3.启动任务[downloadTask resume];
}
复制代码
//获取并计算当前文件的下载进度
-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(NSProgress *)progress change:(NSDictionary<NSString *,id> *)change context:(void *)context
{NSLog(@"%zd--%zd--%f",progress.completedUnitCount,progress.totalUnitCount,1.0 * progress.completedUnitCount/progress.totalUnitCount);
}
复制代码

2.AFN文件上传 1.文件上传拼接数据的第一种方式

[formData appendPartWithFileData:data name:@"file" fileName:@"xxoo.png" mimeType:@"application/octet-stream"];
复制代码

2.文件上传拼接数据的第二种方式

 [formData appendPartWithFileURL:fileUrl name:@"file" fileName:@"xx.png" mimeType:@"application/octet-stream" error:nil];
复制代码

3.文件上传拼接数据的第三种方式

 [formData appendPartWithFileURL:fileUrl name:@"file" error:nil];
复制代码

4.【注】在资料中已经提供了一个用于文件上传的分类。

/文件上传相关的代码如下/

-(void)upload {//1.创建一个请求管理者AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];//2.发送POST请求上传数据/*第一个参数:请求路径:NSString类型第二个参数:要上传的非文件参数第三个参数:block回调在该回调中,需要利用formData拼接即将上传的二进制数据第三个参数:上传成功的block回调task:dataTask(任务)responseObject:服务器返回的数据第四个参数:上传失败的block回调error:错误信息,如果上传文件失败,那么error里面包含了错误的描述信息*/NSDictionary *dict = @{@"username":@""};[manager POST:@"http://120.25.226.186:32812/upload" parameters:dict constructingBodyWithBlock:^(id<AFMultipartFormData>  _Nonnull formData) {//把本地的图片转换为NSData类型的数据UIImage *image = [UIImage imageNamed:@"123"];NSData *data = UIImagePNGRepresentation(image);/*//拼接二进制文件数据第一个参数:要上传的文件的二进制数据第二个参数:服务器接口规定的名称第三个参数:这个参数上传到服务器之后用什么名字来进行保存第四个参数:上传文件的MIMEType类型*/[formData appendPartWithFileData:data name:@"file" fileName:@"xxoo.png" mimeType:@"application/octet-stream"];} success:^(NSURLSessionDataTask * _Nonnull task, id  _Nonnull responseObject) {NSLog(@"请求成功---%@",responseObject);} failure:^(NSURLSessionDataTask * _Nonnull task, NSError * _Nonnull error) {NSLog(@"请求失败--%@",error);}];
}
复制代码
-(void)upload2 {NSLog(@"%s",__func__);//1.创建一个请求管理者AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];//2.发送POST请求上传数据/*第一个参数:请求路径:NSString类型第二个参数:要上传的非文件参数第三个参数:block回调在该回调中,需要利用formData拼接即将上传的二进制数据第三个参数:上传成功的block回调task:dataTask(任务)responseObject:服务器返回的数据第四个参数:上传失败的block回调error:错误信息,如果上传文件失败,那么error里面包含了错误的描述信息*/NSDictionary *dict = @{@"username":@""};[manager POST:@"http://120.25.226.186:32812/upload" parameters:dict constructingBodyWithBlock:^(id<AFMultipartFormData>  _Nonnull formData) {//本地文件的urlNSURL *fileUrl = [NSURL fileURLWithPath:@"/Users/username/Desktop/KF[WTI`AQ3T`A@3R(B96D89.gif"];/*//拼接二进制文件数据第一个参数:要上传文件的url路径第二个参数:服务器要求的参数名称第三个参数:这个文件上传到服务器之后叫什么名称第四个参数:文件的mimetype类型第五个参数:错误信息*/
//        [formData appendPartWithFileURL:fileUrl name:@"file" fileName:@"xx.png" mimeType:@"application/octet-stream" error:nil];//另外一种上传文件的方式/*说明:该方法和上面的方法等价,不过该方法更加简单其内部会自动的的根据url路径确定文件保存名称,并通过内部方法获取上传文件的mimetype类型*/[formData appendPartWithFileURL:fileUrl name:@"file" error:nil];} success:^(NSURLSessionDataTask * _Nonnull task, id  _Nonnull responseObject) {NSLog(@"请求成功---%@",responseObject);} failure:^(NSURLSessionDataTask * _Nonnull task, NSError * _Nonnull error) {NSLog(@"请求失败--%@",error);}];
}
复制代码

3.使用AFN进行序列化处理 /* 1.AFN它内部默认把服务器响应的数据当做json来进行解析,所以如果服务器返回给我的不是JSON数据那么请求报错,这个时候需要设置AFN对响应信息的解析方式。AFN提供了三种解析响应信息的方式,分别是: 1)AFXMLParserResponseSerializer----XML 2) AFHTTPResponseSerializer---------默认二进制响应数据 3)AFJSONResponseSerializer---------JSON

2.还有一种情况就是服务器返回给我们的数据格式不太一致(开发者工具Content-Type:text/xml),那么这种情况也有可能请求不成功。解决方法: 1) 直接在源代码中修改,添加相应的Content-Type 2) 拿到这个属性,添加到它的集合中

3.相关代码

-(void)serialized {//1.创建请求管理者,内部基于NSURLSessionAFHTTPSessionManager *manager = [AFHTTPSessionManager manager];/* 知识点1:设置AFN采用什么样的方式来解析服务器返回的数据*///如果返回的是XML,那么告诉AFN,响应的时候使用XML的方式解析manager.responseSerializer = [AFXMLParserResponseSerializer serializer];//如果返回的就是二进制数据,那么采用默认二进制的方式来解析数据//manager.responseSerializer = [AFHTTPResponseSerializer serializer];//采用JSON的方式来解析数据//manager.responseSerializer = [AFJSONResponseSerializer serializer];/*知识点2 告诉AFN,再序列化服务器返回的数据的时候,支持此种类型[AFJSONResponseSerializer serializer].acceptableContentTypes = [NSSet setWithObject:@"text/xml"];//2.把所有的请求参数通过字典的方式来装载,GET方法内部会自动把所有的键值对取出以&符号拼接并最后用?符号连接在请求路径后面NSDictionary *dict = @{@"username":@"223",@"pwd":@"ewr",@"type":@"XML"};//3.发送GET请求[manager GET:@"http://120.25.226.186:32812/login" parameters:dict success:^(NSURLSessionDataTask * _Nonnull task, id  _Nonnull responseObject) {//4.请求成功的回调blockNSLog(@"%@",[responseObject class]);} failure:^(NSURLSessionDataTask * _Nonnull task, NSError * _Nonnull error) {//5.请求失败的回调,可以打印error的值查看错误信息NSLog(@"%@",error);}];
}
复制代码

4.使用AFN来检测网络状态 /* 说明:可以使用AFN框架中的AFNetworkReachabilityManager来监听网络状态的改变,也可以利用苹果提供的Reachability来监听。建议在开发中直接使用AFN框架处理。 */ //使用AFN框架来检测网络状态的改变

-(void)AFNReachability {//1.创建网络监听管理者AFNetworkReachabilityManager *manager = [AFNetworkReachabilityManager sharedManager];//2.监听网络状态的改变/*AFNetworkReachabilityStatusUnknown          = 未知AFNetworkReachabilityStatusNotReachable     = 没有网络AFNetworkReachabilityStatusReachableViaWWAN = 3GAFNetworkReachabilityStatusReachableViaWiFi = WIFI*/[manager setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {switch (status) {case AFNetworkReachabilityStatusUnknown:NSLog(@"未知");break;case AFNetworkReachabilityStatusNotReachable:NSLog(@"没有网络");break;case AFNetworkReachabilityStatusReachableViaWWAN:NSLog(@"3G");break;case AFNetworkReachabilityStatusReachableViaWiFi:NSLog(@"WIFI");break;default:break;}}];//3.开始监听[manager startMonitoring];
}
复制代码

//使用苹果提供的Reachability来检测网络状态,如果要持续监听网络状态的概念,需要结合通知一起使用。

-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {//1.注册一个通知[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(networkChange) name:kReachabilityChangedNotification object:nil];//2.拿到一个对象,然后调用开始监听方法Reachability *r = [Reachability reachabilityForInternetConnection];[r startNotifier];//持有该对象,不要让该对象释放掉self.r = r;
}//当控制器释放的时候,移除通知的监听
-(void)dealloc
{[[NSNotificationCenter defaultCenter] removeObserver:self];
}-(void)networkChange
{//获取当前网络的状态if ([Reachability reachabilityForInternetConnection].currentReachabilityStatus == ReachableViaWWAN){NSLog(@"当前网络状态为3G");return;}if ([Reachability reachabilityForLocalWiFi].currentReachabilityStatus == ReachableViaWiFi){NSLog(@"当前网络状态为wifi");return;}NSLog(@"当前没有网络");
}
复制代码

5.AFN使用技巧 1.在开发的时候可以创建一个工具类,继承自我们的AFN中的请求管理者,再控制器中真正发请求的代码使用自己封装的工具类。 2.这样做的优点是以后如果修改了底层依赖的框架,那么我们修改这个工具类就可以了,而不用再一个一个的去修改。 3.该工具类一般提供一个单例方法,在该方法中会设置一个基本的请求路径。 4.该方法通常还会提供对GET或POST请求的封装。 5.在外面的时候通过该工具类来发送请求 6.单例方法:

+ (instancetype)shareNetworkTools {static XMGNetworkTools *instance;static dispatch_once_t onceToken;dispatch_once(&onceToken, ^{// 注意: BaseURL中一定要以/结尾instance = [[self alloc] initWithBaseURL:[NSURL URLWithString:@"http://120.25.226.186:32812/"]];});return instance;
}
复制代码

相关文章:

【青少年编程】【一级】小镇一日游

「青少年编程竞赛交流群」已成立&#xff08;适合6至18周岁的青少年&#xff09;&#xff0c;公众号后台回复【Scratch】或【Python】&#xff0c;即可进入。如果加入了之前的社群不需要重复加入。 微信后台回复“资料下载”可获取以往学习的材料&#xff08;视频、代码、文档&…

参加java培训后,就业方向有哪些

参加java培训后&#xff0c;就业方向有哪些?很多正在参加java培训的同学对这个问题都比较关注&#xff0c;那么下面小编就针对这个问题为大家做下详细的介绍&#xff0c;希望能够帮助到大家。 参加java培训后&#xff0c;就业方向有哪些?首先我们来了解一下Java的应用领域&am…

访问本地文件403

电脑不知道怎么设置的根目录下看不到所有文件夹 而且打开一个新的文件夹显示 Forbidden You dont have permission to access /atina/ on this server. 最后没办法只能手动把文件夹加上权限 chmod -R 777 atina //-R 递归修改&#xff0c;“/文件夹/“以下所有内容&#xff08…

iOS微信支付集成 SDK1 7 5

最近做了一个新项目&#xff0c;涉及到支付宝和微信支付&#xff0c;支付宝和微信都是业界的老大哥&#xff0c;相信大家都有所觉得文档、SDK都是各种坑吧&#xff08;纯粹吐槽而已&#xff09;&#xff0c;这是继上篇支付宝支付集成后接着的微信支付集成。 1.微信商户申请步骤…

【青少年编程(第26周)】一下子多了很多事!

2021年08月15日&#xff08;周日&#xff09;晚20:00我们在青少年编程竞赛交流群开展了第二十六次直播活动。我们直播活动的主要内容如下&#xff1a; 首先&#xff0c;我们奖励了上周测试超过60分的小朋友。 其次&#xff0c;介绍了Datawhale青少年组队学习活动的规划&#x…

Python培训教程分享:10款超好用的Python开发工具

学会Python技术后&#xff0c;我们在参加工作的时候如果能有辅助工具的话&#xff0c;那么会很大程度的提高我们的工作效率&#xff0c;那么Python都有哪些好用的开发工具呢?下面小编就为大家详细的介绍一下10款超好用的Python开发工具! Python培训教程分享&#xff1a;10款超…

pfSense book之2.4安装指南

pfSense商店的硬件产品都预装了pfSense软件。要重新安装pfSense软件或将其安装到其他硬件&#xff0c;请按照本章所述下载安装程序映像。警告预先从pfSense商店或授权合作伙伴以外的商业供应商预装pfSense软件的硬件不值得信任。 第三方可能已经对软件进行了未经授权的、未知的…

css中绝对定位中的left和top属性

<html><head><title>Absolute Position</title><style type "text/css">/*body具有红色边框&#xff0c;宽度300px&#xff0c;高度300px*/body {border: 1px solid red;width: 300px;height: 300px;}/*被绝对定位,颜色为silver*/div…

教育部办公厅关于2020-2021学年面向中小学生的全国性竞赛活动名单的公示

来源&#xff1a; http://www.moe.gov.cn/jyb_xxgk/s5743/s5745/202007/t20200701_469571.html 教育部办公厅关于2020-2021学年面向中小学生的全国性竞赛活动名单的公示 根据《教育部办公厅印发<关于面向中小学生的全国性竞赛活动管理办法&#xff08;试行&#xff09;&g…

UI设计培训分享:UI设计师如何准备面试?

很多参加完UI培训的同学后期都是需要面临找工作的&#xff0c;那么面试环节是必须要经历的&#xff0c;今天小编为大家介绍的内容就是关于UI设计师如何准备面试?希望下面的内容能够帮助到正在找工作的同学们。 UI设计培训分享&#xff1a;UI设计师如何准备面试? 一、 简历要重…

【CLR的执行模型:将源代码编译成托管模块】

CLR:由多种不同编程语言使用的运行库 托管模块&#xff1a;中间语言和元数据 非托管语言&#xff1a;C/C&#xff0c;不过此为特殊&#xff0c;可以写成托管代码 托管语言&#xff1a;C# 托管模块 1,PE32/PE32头:PE32运行在win32位系统中,win32运行在64位系统 2,CLR头,包括CLR版…

【组队学习】【28期】数据采集从入门到精通

数据采集从入门到精通 论坛版块&#xff1a; http://datawhale.club/c/team-learning/38-category/38 开源内容&#xff1a; https://github.com/datawhalechina/team-learning-program/tree/master/CollectData 学习目标 随着数字化的不断推进&#xff0c;数据采集在数据…

url传递数据类型

php中传递数据&#xff0c;get或post方式为啥用字符串传递&#xff0c;为什么不能直接用数组形式&#xff0c;用的话可以吗 转载于:https://www.cnblogs.com/guoyinglichong/p/8184723.html

零基础参加java培训哪家机构好

零基础想要学会java技术&#xff0c;那么参加java培训机构是非常明智的选择&#xff0c;为什么这么说呢?因为如果选择自学&#xff0c;那么不仅学到的技术杂乱无章&#xff0c;后期工作也会有很大阻碍&#xff0c;系统的学习就会好很多&#xff0c;那么如今零基础参加java培训…

如何通过一行代码下载B站视频?

文章目录如何通过一行代码下载B站视频&#xff1f;Step1&#xff1a;安装you-getStep2&#xff1a;下载B站视频总结如何通过一行代码下载B站视频&#xff1f; You-Get 是一个基于 Python 3 的下载工具。使用 You-Get 可以很轻松的下载网络上的视频、图片及音乐。 下面我们介绍…

软件架构是软件的组织形式

软件架构是软件的组织形式 软件架构是软件的逻辑组织形式&#xff1b; 软件框架是软件的物理组织形式。

linux创建用户并授予sudo权限

1. 新建用户 rootubuntu:~# adduser hadoop rootubuntu:~# passwd hadoop #为hadoop用户设置密码 2. 为hadoop用户添加sudo权限 rootubuntu:~# sudo gedit /etc/sudoers 把root那行复制后改成hadoop&#xff0c;hadoop就有了sudo权限&#xff0c;需要sudo密码则为ALL&#xff0…

学java培训开发需要多少钱

学java培训开发需要多少钱?这个问题对于想要学习java技术的小伙伴们来说是非常重要的&#xff0c;如今市面上的java培训机构非常多&#xff0c;收费标准都是多少呢?那么来看看下面的详细介绍吧。 学java培训开发需要多少钱?不少学员会直接咨询费用的问题&#xff0c;确实&am…

Scratch青少年编程能力等级测试模拟题(一级)

青少年编程竞赛交流群已成立&#xff08;适合6至18周岁的青少年&#xff09;&#xff0c;公众号后台回复【Scratch】或【Python】&#xff0c;即可进入。如果加入了之前的社群不需要重复加入。 微信后台回复“资料下载”可获取以往学习的材料&#xff08;视频、代码、文档&…

ODBC、OLE连接各种数据库的连接字符串

简介 我们在使用数据库的时候&#xff0c;首先需要打开这个数据库。我们可以找到集中类型的数据库&#xff0c;每个都使用不同的连接方式。下面列举了一下主要的数据库的连接字符串A&#xff1a;使用ODBC方式1:dBASE连接字符串strConnection _T("Driver{Microsoft dBASE …

opencv3 图像处理(一)图像缩放( python与c++ 实现)

opencv3 图像处理 之 图像缩放&#xff08; python与c实现 &#xff09; 一. 主要函数介绍 1) 图像大小变换 Resize () 原型&#xff1a; void Resize(const CvArr* src,CvArr* dst,intinterpolationCV_INTER_LINEAR); 说明&#xff1a; src 表示输入图像。 dst表示输出图像。 …

web前端培训要学多久

​ 近几年web前端在互联网行业的快速发展&#xff0c;很多人都对web前端是非常感兴趣的&#xff0c;学习web前端技术的人越来越多&#xff0c;那么参加web前端培训要学多久呢?相信大家都想知道这个答案&#xff0c;我们来看看下面的详细介绍。 web前端培训要学多久?首先对于前…

【Arduino】开发入门教程【一】什么是Arduino

Arduino Arduino 是一款便捷灵活、方便上手的开源电子原型平台&#xff0c;包含硬件&#xff08;各种型号的arduino板&#xff09;和软件&#xff08;arduino IDE)。它适用于艺术家、设计师、爱好者和对于“互动”有兴趣的朋友们。Arduino&#xff0c;是一个基于开放原始码的软…

【云计算的1024种玩法】回忆经典,用虚拟主机重建复古DZ和无心宠物

前言 在移动互联网和大型网游没有普及前&#xff0c;很多地方论坛或者专业性论坛都会有一个 —— “无心宠物” 插件来引流和吸引用户&#xff0c;可以说是当下网页游戏的老前辈了。还记得我以前就是为了玩这个游戏&#xff0c;就在各个论坛疯狂发帖赚经验&#xff0c;想来还是…

谢文睿:西瓜书 + 南瓜书 吃瓜系列 9. 集成学习(上)

Datawhale南瓜书是经典机器学习教材《机器学习》&#xff08;西瓜书&#xff09;的公式推导解析指南&#xff0c;旨在让在学习西瓜书的过程中&#xff0c;再也没有难推的公式&#xff0c;学好机器学习。 航路开辟者&#xff1a;谢文睿、秦州开源内容&#xff1a;https://githu…

java培训分享:java软件开发可以用哪些软件?

从事java相关工作的小伙伴应该都有一个习惯&#xff0c;那就是运用软件的方便来达到高效率工作&#xff0c;本期小编为大家介绍的java培训教程就是关于“java软件开发可以用哪些软件?”的内容&#xff0c;来看看下面的详细介绍吧。 java软件开发可以用哪些软件? MyEclipse 顾…

Ext-第一课基本配置

(1)废话&#xff1a;最近开始学习使用Ext&#xff0c;所以记录下来自己的配置和新的&#xff0c;提供给新手菜鸟们&#xff0c;希望能对你有所帮助。 (2)走着&#xff1a;官方文档&#xff1a;http://www.myext.cn/ext-3.2.1/docs/ 我使用的是ext-3.3.0 下载解压后如下图&#…

Only POT texture can be compressed to PVRTC format

在图片压缩格式 报这个Warning的时候&#xff0c;意思是该图片必须要采用2的幂次方大小才能使用该格式。 POT: Power of Two. 采取方式是在advanced里边&#xff0c;把Non Power of 2 设置一下。或者原图采用幂次方大小。

【青少年编程】【一级】 奔跑的马

奔跑的马 1. 准备工作 &#xff08;1&#xff09;添加背景 Forest 和 Wetland&#xff1b; &#xff08;2&#xff09;添加角色Unicorn Running&#xff1b; &#xff08;3&#xff09;为Unicorn Running 添加声音 Gallop。 2. 功能实现 &#xff08;1&#xff09;点击绿旗…

Python培训教程:Python有哪些比较重要的内置函数?

学习Python技术或者参加Python工作的小伙伴们应该都知道&#xff0c;在Python编程语言中会经常出现很多内置函数&#xff0c;很少有人清楚这些函数&#xff0c;但是它的功能是不可小觑的&#xff0c;下面小编就为大家详细介绍一下Python有哪些比较重要的内置函数? Python培训教…