zoukankan      html  css  js  c++  java
  • [IOS]UIWebView实现保存页面和读取服务器端json数据

    如何通过viewView保存访问过的页面?和如何获取并解析服务器端发送过来的json数据?通过一个简单的Demo来学习一下吧!

    操作步骤:

    1.创建SingleViewApplication应用,新建VIewController,并在xib试图中添加WebView,继承webview的Delegate协议。

    2.将ViewController类遵循UIWebViewDelegate和NSURLConnectionDataDelegate协议,并且实现协议中的方法。

    ViewController.h:

    #import <UIKit/UIKit.h>
    
    @interface ViewController : UIViewController<UIWebViewDelegate,NSURLConnectionDataDelegate>
    @property (retain, nonatomic) IBOutlet UIWebView *webview;
    @property (retain, nonatomic) UIAlertView * alert;
    @property (retain, nonatomic) IBOutlet UITextField *searchText;
    - (IBAction)searchClick:(id)sender;
    
    
    @property (retain, nonatomic) IBOutlet UILabel *label;
    @property (retain, nonatomic) NSURLConnection * connection;
    @property (retain, nonatomic) NSMutableData * data;
    @end

    VIewController.m:

    #import "ViewController.h"


    @interfaceViewController ()


    @end


    @implementation ViewController


    - (void)viewDidLoad

    {

        [superviewDidLoad];

    // Do any additional setup after loading the view, typically from a nib.

        

        //请求网络页面

    //    NSURL * url = [NSURL URLWithString:@"http://www.taobao.com"];   //一定要加http://

    //    NSURLRequest * request = [NSURLRequest requestWithURL:url];

    //    [self.webview loadRequest:request];

    //    

    //    

    //    //html加载本地网页

    //    NSString * str = [[NSBundle mainBundle] pathForResource:@"百度图片全球最大中文图片库" ofType:@"html"];

    //    str = [NSString stringWithContentsOfFile:str encoding:NSUTF8StringEncoding error:nil];

    //    NSLog(@"%@",str);

    //    [self.webview loadHTMLString:str baseURL:[[NSBundle mainBundle]bundleURL]];

    //    

        

        

        self.label.text = @"正在请求数据";

        //step1:请求地址

        //保存页面

        //NSString * urlString = @"http://www.baidu.com";

        //访问服务器获取json数据

        NSString * urlString = @"http://www.weather.com.cn/data/cityinfo/101020100.html";

        NSURL * url = [NSURL URLWithString:urlString];

        //step2:实例化一个request

        NSURLRequest * request = [NSURLRequestrequestWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicytimeoutInterval:30.0];

        //step3:创建链接

        self.connection = [[NSURLConnectionalloc] initWithRequest:request delegate:self];

        if(self.connection)

        {

            NSLog(@"创建链接成功");

        }else{

            NSLog(@"创建链接失败");

        }

        [url release];

        [urlString release];

        

    }


    - (void)didReceiveMemoryWarning

    {

        [superdidReceiveMemoryWarning];

        // Dispose of any resources that can be recreated.

    }


    - (void)dealloc {

        [_webview release];

        [_searchTextrelease];

        [_label release];

        [super dealloc];

    }

    //获取数据

    -(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response

    {

        //接受一个服务端回话,再次一般初始化接受数据的对象

        //NSLog(@"返回数据类型%@",[response ]);

        //NSLog(@"返回数据编码%@",[response text]);

        NSMutableData * data = [[NSMutableDataalloc] 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:[self dataFilePath:@"百度图片全球最大中文图片库.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];


    }


    -(void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error

    {

        self.label.text = @"连接失败";

    }



    - (IBAction)searchClick:(id)sender {

    }

    @end




    结果:

    2013-08-27 16:09:18.821 WebViewDemo[673:c07] 创建链接成功

    2013-08-27 16:09:19.161 WebViewDemo[673:c07] 返回数据量:153

    2013-08-27 16:09:19.161 WebViewDemo[673:c07] 153

    2013-08-27 16:09:19.193 WebViewDemo[673:c07] 最后的结果{"weatherinfo":{"city":"上海","cityid":"101020100","temp1":"32","temp2":"27","weather":"多云","img1":"d1.gif","img2":"n1.gif","ptime":"11:00"}}



  • 相关阅读:
    JS是单线程的吗?
    JQuery $ $.extend(),$.fn和$.fn.extend javaScript对象、DOM对象和jQuery对象及转换 工具方法(utility)
    JavaScript 操作符 变量
    WEB组件 开发 (未完成 413)
    CSS传统布局之布局模型
    JavaScript 作用域 匿名函数 模仿块级作用域(私有作用域)
    JQuery常用API 核心 效果 JQueryHTML 遍历 Event事件
    JavaScript 属性类型(数据属性 访问器属性)
    CSS居中问题:块级元素和行级元素在水平方向以及垂直方向的居中问题
    javascript 深入浅出 (未完成417)
  • 原文地址:https://www.cnblogs.com/riskyer/p/3285853.html
Copyright © 2011-2022 走看看