[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源文件下载(猛戳)

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值