且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

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

更新时间:2022-09-04 23:31:46

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

-(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:

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

效果图:

请求网络的加载效果:

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

请求结束的效果图:

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

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:

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

请求后的效果图:

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

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:

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

请求网络后的效果图:

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

Demo源文件下载(猛戳)














本文转蓬莱仙羽51CTO博客,原文链接:http://blog.51cto.com/dingxiaowei/1366414,如需转载请自行联系原作者