您的位置:首页 > 理论基础 > 计算机网络

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

2013-08-27 21:38 501 查看
如何读取沙盒中的文件,和保存网络资源到沙盒中?
-(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源文件下载(猛戳)

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: