[IOS]网络操作+图片的下载和读取+json数据读取

简介:

如何读取沙盒中的文件,和保存网络资源到沙盒中?

-(NSString *)dataFilePath:(NSString*)fileName

{

    NSArray *paths=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES);

    

    NSString *document=[paths objectAtIndex:0];

    

    return [documentstringByAppendingPathComponent:fileName];

}


-(void)connectionDidFinishLoading:(NSURLConnection *)connection

    //可以下载图片

    [self.datawriteToFile:[selfdataFilePath:@"image.jpg"]atomically:YES];

    self.webView.hidden =YES;

    //将沙盒中的图片加载到界面中

    NSString *path = [selfdataFilePath:@"image.jpg"];

    UIImage *imag = [[UIImagealloc]initWithContentsOfFile:path];

    UIImageView *img = [[UIImageViewalloc]initWithImage:imag];

    CGRect rect = CGRectMake(0,0,320,460);

    img.frame = rect;

    [self.viewaddSubview:img];

}


进入主题,接下来我要实现三个功能:

1.访问网页

2.从网上加载图片资源到本地

3.发送get请求获取到天气预报的接口,然后保存到本地接着是json解析

功能设计:

1.webView的使用

PageViewController.h:

#import <UIKit/UIKit.h>  @interface PageViewController : UIViewController<UIWebViewDelegate> @property (retain, nonatomic) IBOutlet UIWebView *webView; - (IBAction)GoClick:(id)sender; @property (retain, nonatomic) IBOutlet UITextField *txtUrl; - (IBAction)resignBoardClick:(id)sender; @property(retain,nonatomic)NSURL *url; @property(nonatomic,retain)UIAlertView *alert; @end

PageViewController.m:

// //  PageViewController.m //  地图+网络 // //  Created by 丁小未 on 13-8-27. //  Copyright (c) 2013年 dingxiaowei. All rights reserved. //  #import "PageViewController.h"  @interface PageViewController ()  @end  @implementation PageViewController  - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {     self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];     if (self) {         self.title = @"页面";     }     return self; }  -(void)pageLoad1:(NSURL *)url {     NSURLRequest *request = [NSURLRequest requestWithURL:url];     [self.webView loadRequest:request]; }  - (void)viewDidLoad {     [super viewDidLoad];     self.url = [NSURL URLWithString:@"http://www.baidu.com"];     NSURLRequest *request = [NSURLRequest requestWithURL:self.url];     [self pageLoad1:self.url];  }  -(void)webViewDidFinishLoad:(UIWebView *)webView {     [self.alert dismissWithClickedButtonIndex:0 animated:YES]; }  -(void)webViewDidStartLoad:(UIWebView *)webView {     self.alert = [[UIAlertView alloc] initWithTitle:@"Loading..." message:nil delegate:nil cancelButtonTitle:nil otherButtonTitles: nil];     [self.alert show];          UIActivityIndicatorView *aiv = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge];     aiv.center = CGPointMake(self.alert.bounds.size.width/2, self.alert.bounds.size.height/2);     [aiv startAnimating];     [self.alert addSubview:aiv]; }  - (void)dealloc {     [_webView release];     [_url release];     [_txtUrl release];     [_alert release];     [super dealloc]; } - (IBAction)GoClick:(id)sender {     [self.txtUrl resignFirstResponder];     if (self.txtUrl.text != nil) {         self.url = [NSURL URLWithString:self.txtUrl.text];         [self pageLoad1:self.url];     }     else     {         self.alert = [[UIAlertView alloc] initWithTitle:@"提醒" message:@"地址不能为空" delegate:self cancelButtonTitle:@"OK"otherButtonTitles: nil];         [self.alert show];     } } - (IBAction)resignBoardClick:(id)sender {     [self.txtUrl resignFirstResponder]; } @end 

xib:


效果图:

请求网络的加载效果:


请求结束的效果图:


2.根据URL地址请求网络图片并且显示出来

PicViewController.h:

// //  PicViewController.h //  地图+网络 // //  Created by 丁小未 on 13-8-27. //  Copyright (c) 2013年 dingxiaowei. All rights reserved. //  #import <UIKit/UIKit.h>  @interface PicViewController : UIViewController<UIWebViewDelegate,NSURLConnectionDataDelegate>  @property(nonatomic,retain)NSURL *url; @property (retain, nonatomic) IBOutlet UIWebView *webView; @property (retain, nonatomic) NSMutableData * data; @property (retain, nonatomic) NSURLConnection * connection;  @end 

PicViewController.m:

// //  PicViewController.m //  地图+网络 // //  Created by 丁小未 on 13-8-27. //  Copyright (c) 2013年 dingxiaowei. All rights reserved. //  #import "PicViewController.h"  @interface PicViewController ()  @end  @implementation PicViewController  - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {     self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];     if (self) {         // Custom initialization     }     return self; }  - (void)viewDidLoad {     [super viewDidLoad];     NSString *urlString =@"http://e.hiphotos.baidu.com/album/w%3D2048/sign=76d548844afbfbeddc59317f4cc8f636/267f9e2f07082838334a05afb999a9014d08f1c2.jpg";     self.url = [NSURL URLWithString:urlString];     NSURLRequest *request = [[NSURLRequest alloc] initWithURL:self.url];     [self.webView loadRequest:request];          //step3:创建链接          self.connection = [[NSURLConnection alloc] initWithRequest:request delegate:self];          if(self.connection)              {                  NSLog(@"创建链接成功");              }else{                  NSLog(@"创建链接失败");              }               [urlString release]; }  //获取数据  -(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response  {               NSMutableData * data = [[NSMutableData alloc] init];          self.data = data;          [data release];      }  //不断的获取数据  -(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data  {          //接受返回数据,这个方法可能会被调用多次,因此将多次返回数据加起来          NSInteger datalength = [data length];          NSLog(@"返回数据量:%d",datalength);          [self.data appendData:data];      }  //获取文件地址  -(NSString *)dataFilePath:(NSString*)fileName  {          NSArray *paths=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES);          NSString *document=[paths objectAtIndex:0];          return [document stringByAppendingPathComponent:fileName];      }  -(void)connectionDidFinishLoading:(NSURLConnection *)connection  {      //可以下载图片     [self.data writeToFile:[self dataFilePath:@"image.jpg"] atomically:YES];     self.webView.hidden = YES;     //将沙盒中的图片加载到界面中     NSString *path = [self dataFilePath:@"image.jpg"];     UIImage *imag = [[UIImage alloc] initWithContentsOfFile:path];     UIImageView *img = [[UIImageView alloc] initWithImage:imag];     CGRect rect = CGRectMake(0, 0, 320,460);     img.frame = rect;     [self.view addSubview:img]; }   -(void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error  {          NSLog(@"连接失败");      }  - (void)dealloc {     [_webView release];     [super dealloc]; } @end 


xib:


请求后的效果图:


3.请求天气预报的接口然后json解析请求后的数据并且保存到本地显示出来

WeatherViewController.h:

// //  WeatherViewController.h //  地图+网络 // //  Created by 丁小未 on 13-8-27. //  Copyright (c) 2013年 dingxiaowei. All rights reserved. //  #import <UIKit/UIKit.h>  @interface WeatherViewController : UIViewController<UIWebViewDelegate,NSURLConnectionDataDelegate> @property (retain, nonatomic) IBOutlet UITextField *txtCity; @property (retain, nonatomic) IBOutlet UITextField *txtMaxTem; @property (retain, nonatomic) IBOutlet UITextField *txtMinTem; @property (retain, nonatomic) IBOutlet UITextField *txtTempreture; @property(retain,nonatomic)NSMutableData *data; @property (retain, nonatomic) IBOutlet UILabel *label; @property(retain,nonatomic)NSURLConnection *connection; - (IBAction)resignBoard:(id)sender;  @end 

WeatherViewController.m:

// //  WeatherViewController.m //  地图+网络 // //  Created by 丁小未 on 13-8-27. //  Copyright (c) 2013年 dingxiaowei. All rights reserved. //  #import "WeatherViewController.h"  @interface WeatherViewController ()  @end  @implementation WeatherViewController  - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {     self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];     if (self) {              }     return self; }  - (void)viewDidLoad {     [super viewDidLoad];     self.label.text = @"正在请求数据";     NSString *urlString = @"http://www.weather.com.cn/data/cityinfo/101020100.html";     NSURL *url = [NSURL URLWithString:urlString];     //实例化一个request     NSURLRequest *request = [NSURLRequest requestWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:30.0];     //创建连接     self.connection = [[NSURLConnection alloc] initWithRequest:request delegate:self];     if (self.connection) {         NSLog(@"创建连接成功");     }     else     {         NSLog(@"创建连接失败");     }     [url release];     [urlString release]; }  //获取数据  -(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response  {          //接受一个服务端回话,再次一般初始化接受数据的对象          //NSLog(@"返回数据类型%@",[response ]);          //NSLog(@"返回数据编码%@",[response text]);          NSMutableData * data = [[NSMutableData alloc] init];          self.data = data;          [data release];      }  //不断的获取数据  -(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data  {          //接受返回数据,这个方法可能会被调用多次,因此将多次返回数据加起来          NSInteger datalength = [data length];          NSLog(@"返回数据量:%d",datalength);          [self.data appendData:data];      }  //获取文件地址  -(NSString *)dataFilePath:(NSString*)fileName  {          NSArray *paths=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES);          NSString *document=[paths objectAtIndex:0];          return [document stringByAppendingPathComponent:fileName];      }   -(void)connectionDidFinishLoading:(NSURLConnection *)connection  {         //连接结束          NSLog(@"%d",[self.data length]);          self.label.text =@"天气预报";          //可以下载图片          //[self.data writeToFile:[self dataFilePath:@"image.jpg"] atomically:YES];                //    NSString * mystr = [[NSStringalloc] initWithData:self.dataencoding:NSUTF8StringEncoding]; //     //    [mystr writeToFile:[selfdataFilePath:@"百度图片—全球最大中文图片库.html"] atomically:YES encoding:NSUTF8StringEncoding error:nil]; //     //    NSLog(@"最后的结果%@",mystr); //     //    [mystr release];              NSDictionary *weather = [NSJSONSerialization JSONObjectWithData:self.data options:NSJSONReadingMutableContainers  error:nil];              NSLog(@"%@",weather);              [weather writeToFile:[self dataFilePath:@"weather.plist"] atomically:YES];          NSLog(@"%@",[weather allKeys]);     NSDictionary *dic = [weather objectForKey:@"weatherinfo"];     NSLog(@"%@",dic);          self.txtCity.text = [dic objectForKey:@"city"];     self.txtTempreture.text = [dic objectForKey:@"weather"];     self.txtMaxTem.text = [dic objectForKey:@"temp2"];     self.txtMinTem.text = [dic objectForKey:@"temp1"]; }   -(void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error  {          self.label.text =@"连接失败";      }  - (void)dealloc {     [_txtCity release];     [_txtMaxTem release];     [_txtMinTem release];     [_txtTempreture release];     [_label release];     [super dealloc]; } - (IBAction)resignBoard:(id)sender {     [self.txtMaxTem resignFirstResponder];     [self.txtMinTem resignFirstResponder];     [self.txtCity resignFirstResponder];     [self.txtTempreture resignFirstResponder]; } @end 

xib:


请求网络后的效果图:


Demo源文件下载(猛戳)














本文转蓬莱仙羽51CTO博客,原文链接:http://blog.51cto.com/dingxiaowei/1366414,如需转载请自行联系原作者
相关文章
|
13天前
|
监控 安全 网络安全
云计算与网络安全:保护数据的关键策略
【9月更文挑战第34天】在数字化时代,云计算已成为企业和个人存储、处理数据的优选方式。然而,随着云服务的普及,网络安全问题也日益凸显。本文将探讨云计算环境中的网络安全挑战,并提供一系列策略来加强信息安全。从基础的数据加密到复杂的访问控制机制,我们将一探究竟如何在享受云服务便利的同时,确保数据的安全性和隐私性不被侵犯。
33 10
|
18天前
|
存储 安全 网络安全
云计算与网络安全:守护数据,构筑未来
在当今的信息化时代,云计算已成为推动技术革新的重要力量。然而,随之而来的网络安全问题也日益凸显。本文从云服务、网络安全和信息安全等技术领域展开,探讨了云计算在为生活带来便捷的同时,如何通过技术创新和策略实施来确保网络环境的安全性和数据的保密性。
|
11天前
|
SQL 安全 测试技术
网络安全与信息安全:保护数据的艺术
【9月更文挑战第36天】在数字化时代,网络安全和信息安全已成为维护个人隐私和企业资产的基石。本文深入探讨了网络安全漏洞、加密技术以及安全意识的重要性,旨在为读者提供一份知识宝典,帮助他们在网络世界中航行而不触礁。我们将从网络安全的基本概念出发,逐步深入到复杂的加密算法,最后强调培养安全意识的必要性。无论你是IT专业人士还是日常互联网用户,这篇文章都将为你打开一扇了解和实践网络安全的大门。
24 2
|
20天前
|
小程序 开发者
微信小程序之网络数据请求 wx:request的简单使用
这篇文章介绍了微信小程序中如何使用wx.request进行网络数据请求,包括请求的配置、请求的格式以及如何在开发阶段关闭请求的合法检验。
微信小程序之网络数据请求 wx:request的简单使用
|
23天前
|
XML 存储 JSON
Twaver-HTML5基础学习(19)数据容器(2)_数据序列化_XML、Json
本文介绍了Twaver HTML5中的数据序列化,包括XML和JSON格式的序列化与反序列化方法。文章通过示例代码展示了如何将DataBox中的数据序列化为XML和JSON字符串,以及如何从这些字符串中反序列化数据,重建DataBox中的对象。此外,还提到了用户自定义属性的序列化注册方法。
34 1
|
4天前
|
JSON JavaScript API
(API接口系列)商品详情数据封装接口json数据格式分析
在成长的路上,我们都是同行者。这篇关于商品详情API接口的文章,希望能帮助到您。期待与您继续分享更多API接口的知识,请记得关注Anzexi58哦!
|
6天前
|
JSON 前端开发 Java
【Spring】“请求“ 之传递 JSON 数据
【Spring】“请求“ 之传递 JSON 数据
32 2
|
20天前
|
存储 JSON Go
在Gin框架中优雅地处理HTTP请求体中的JSON数据
在Gin框架中优雅地处理HTTP请求体中的JSON数据
|
23天前
|
JSON JavaScript 数据格式
vue写入json数据到文本中+vue引入cdn的用法
vue写入json数据到文本中+vue引入cdn的用法
49 10
|
21天前
|
JSON 数据格式
Blob格式转json格式,拿到后端返回的json数据
文章介绍了如何将后端返回的Blob格式数据转换为JSON格式,并处理文件下载和错误提示。
31 0
Blob格式转json格式,拿到后端返回的json数据