iOS - Swift网络获取数据 ~(更新)
程序员文章站
2024-03-23 09:02:10
...
封装伊始
首先声明一个类继承于AFHTTPSessionManager
class SwiftHttpNetwork: AFHTTPSessionManager
func setBaseUrl (baseURL:NSString?,timeOutInterval :Double ){
SwiftHttpNetwork._baseURL = baseURL
SwiftHttpNetwork.networkManager = SwiftHttpNetwork.init(baseURL:self.baseURL)
SwiftHttpNetwork.networkManager?.requestSerializer = AFHTTPRequestSerializer()
SwiftHttpNetwork.networkManager?.responseSerializer = AFJSONResponseSerializer.init()
// 信任证书
SwiftHttpNetwork.networkManager?.securityPolicy = AFSecurityPolicy.init(pinningMode: AFSSLPinningMode.none)
SwiftHttpNetwork.networkManager?.securityPolicy.allowInvalidCertificates = true
SwiftHttpNetwork.networkManager?.securityPolicy.validatesDomainName = false
SwiftHttpNetwork.networkManager?.requestSerializer.timeoutInterval = timeOutInterval
let contentTypes: Set = ["application/json", "text/json", "text/javascript","text/html", "application/x-javascript"]
SwiftHttpNetwork.networkManager?.responseSerializer.acceptableContentTypes = contentTypes
}
当你给的图片地址是一个URL时,你需要显示出来就需要去转换编码不然就不能显示的:如下所示
给定的图片地址是一个字符串类型的,所以需要转换为URL如下所示:
转换为URL后还需要转换为NSData类型数据,如下所示
let data = NSData(contentsOfURL: urlStr!),后面带感叹号是用来拆解包的
之后就放入image中,如下所示:
let image = UIImage(data: data!)
整个代码如下所示:
let urlStr = NSURL(string: "http://img.ivsky.com/img/tupian/pre/201509/13/tianzhukui.jpg")
let data = NSData(contentsOfURL: urlStr!)
let image = UIImage(data: data!)
let imageView = UIImageView(image: image)
imageView.frame = CGRectMake(0,0,SCR_PAGE.width,SCR_PAGE.height)
self.view.addSubview(imageView)
---------------在这里面选择添加的数据-------------------
在News文件中添加数据
import UIKit
class News: NSObject {
var title:String = " "
var time = " "
var scr = " "
var pic = ""
var content = ""
var url = ""
var weburl = ""
}
网络获取:进行数据转换
在文件中进行一些文件的获取
import UIKit
class URLService: NSObject {
func getJokesData(pagenum:Int,pagesize:Int,sort:String, completion:@escaping (Any,Bool)->Void) ->Void {
//get方法
var urlstr = "http://api.jisuapi.com/xiaohua/text?pagenum=\(pagenum)&pagesize=\(pagesize)&sort=\(sort)&appkey=de394933e1a3e2db"
urlstr = urlstr.addingPercentEncoding(withAllowedCharacters: CharacterSet.urlFragmentAllowed)!
let url = URL(string: urlstr)
let req = URLRequest(url: url!, cachePolicy: .reloadIgnoringCacheData, timeoutInterval: 5.0)
let task1 : URLSessionDataTask = URLSession.shared.dataTask(with: req) { (data, reponse, error) in
if error != nil
{
completion("服务器错误",false)
return
}
let jsonData = try?
JSONSerialization.jsonObject(with: data!, options: JSONSerialization.ReadingOptions.allowFragments)
if jsonData == nil
{
completion("解析错误",false)
return
}
let status = (jsonData as! NSDictionary).value(forKey: "status") as! String
let msg = (jsonData as! NSDictionary).value(forKey: "msg") as! String
if Int(status)! != 0{
completion(msg,false)
return
}
let result = (jsonData as! NSDictionary).value(forKey: "result") as! NSDictionary
let list = result.value(forKey: "list") as! NSArray
var newArr:[News] = []
for item in list
{
let dic = item as! NSDictionary
let onenew = News()
onenew.addtime = dic.value(forKey: "addtime")as! String
onenew.content = dic.value(forKey: "content")as! String
newArr.append(onenew)
}
completion(newArr, true)
}
task1.resume()
}
}
最后在表格中进行展示
在viewcontroll中进行
import UIKit
class ViewController: UIViewController,UITableViewDataSource {
var table:UITableView?
var tableDataArr:[News]?
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
if let count = tableDataArr?.count {
return count
}
return 0
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let ID = "cell"
var cell = tableView.dequeueReusableCell(withIdentifier: ID)
if cell == nil {
cell = UITableViewCell.init(style: .subtitle, reuseIdentifier: ID)
}
let oneNew = self.tableDataArr![indexPath.row]
cell?.textLabel?.numberOfLines = 0
cell?.detailTextLabel?.numberOfLines = 0
cell?.textLabel?.text = oneNew.content
cell?.detailTextLabel?.text = oneNew.addtime
return cell!
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
UIApplication.shared.isNetworkActivityIndicatorVisible=true
let urlService = URLService()
urlService.getJokesData(pagenum: 1, pagesize: 10 , sort:" addtime") { (data, success) in
DispatchQueue.main.async {
UIApplication.shared.isNetworkActivityIndicatorVisible = false
}
if !success{
DispatchQueue.main.async {
let alertVC = UIAlertController(title: nil, message: data as? String, preferredStyle: .alert)
let confinBth = UIAlertAction(title: "确定", style: .default, handler: nil)
alertVC . addAction(confinBth)
self.present(alertVC, animated: true, completion: nil)
}
return
}
self.tableDataArr = data as? [News]
DispatchQueue.main.async {
self.table?.reloadData()
}
}
}
override func viewDidLoad() {
super.viewDidLoad()
self.title = *****"
self.table = UITableView.init(frame:self.view.frame , style: .plain)
self.table?.dataSource = self
self.view.addSubview(self.table!)
}
}
//
// ViewController.m
// 快递查询
//
// Created by 小红 on 2018/4/2.
// Copyright © 2018年 小红. All rights reserved.
//
#import "ViewController.h"
#import "AFNetworking.h"
@interface ViewController ()<UITableViewDataSource>
{
NSArray *_tabledataArr;
}
@property (weak, nonatomic) IBOutlet UITextField *numberTF;
- (IBAction)searchPress:(id)sender;
@property (weak, nonatomic) IBOutlet UITableView *resultTable;
@property (weak, nonatomic) IBOutlet UILabel *statusLabel;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
}
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return _tabledataArr.count;
}
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath;
{
static NSString *aaa@qq.com"cell";
UITableViewCell *cell=[tableView dequeueReusableCellWithIdentifier:ID];
if (cell==nil) {
cell=[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:ID];
}
NSDictionary *dic=_tabledataArr[indexPath.row];
cell.textLabel.text=dic[@"time"];
cell.detailTextLabel.text=dic[@"status"];
return cell;
}
- (IBAction)searchPress:(id)sender {
NSString *number=self.numberTF.text;
//网址字符串
NSString *aaa@qq.com"http://api.jisuapi.com/express/query";
AFHTTPSessionManager *manager=[AFHTTPSessionManager manager];
manager.responseSerializer=[[AFHTTPResponseSerializer alloc] init];
NSDictionary *aaa@qq.com{
@"appkey":@"de394933e1a3e2db",
@"type":@"auto",
@"number":number
};
[manager POST:urlStr parameters:paramDic success:^(NSURLSessionDataTask *task, id responseObject) {
NSDictionary *dic=[NSJSONSerialization JSONObjectWithData:responseObject options:NSJSONReadingAllowFragments error:nil];
NSLog(@"%@",dic);
if ([dic[@"status"] intValue]!=0) {
NSLog(@"%@",dic[@"msg"]);
return ;
}
NSDictionary *resulDic=dic[@"result"];
//得到list数组
NSArray *listArr=resulDic[@"list"];
//得到状态数值
int status=[resulDic[@"deliverystatus"] intValue];
dispatch_async(dispatch_get_main_queue(), ^{
_tabledataArr=[listArr copy];
[self.resultTable reloadData];
});
} failure:^(NSURLSessionDataTask *task, NSError *error) {
NSLog(@"%@",error);
}];
}
@end
推荐阅读
-
iOS - Swift网络获取数据 ~(更新)
-
在Swift中,如何更优雅地处理网络返回数据?
-
java使用TimerTask定时器获取指定网络数据
-
详解WordPress中用于更新和获取用户选项数据的PHP函数,wordpressphp_PHP教程
-
java使用TimerTask定时器获取指定网络数据
-
iOS获取当前网络环境的实现方法(推荐)
-
swift - php 如何接受ios端 发来的url头 数据 post方式
-
iOS网络层数据安全处理之AES基本介绍
-
mysql- Mybatis select 没有获取更新数据 (缓存 ?)
-
mysql- Mybatis select 没有获取更新数据 (缓存 ?)