[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"}}
[IOS]UIWebView实现保存页面和读取服务器端json数据的更多相关文章
- 保存json数据到本地和读取本地json数据
private void saveJson(JsonBean bean) { File file = new File(getFilesDir(), "json.txt"); Bu ...
- JS 在页面上直接将json数据导出到excel,支持chrome,edge,IE10+,IE9,IE8,Safari,Firefox
JS 在页面上直接将json数据导出到excel,支持chrome,edge,IE10+,IE9,IE8,Safari,Firefox <html> <head> </h ...
- Nginx下HTML页面POST请求静态JSON数据返回405状态
在浏览器访问HTML页面,发现一些静态JSON数据没有显示,F12查看,如下图所示: 可以看到请求方式为POST 将请求链接复制在浏览器地址栏访问,可以正常请求到数据 F12查看,可以看到请求方式为G ...
- unity3d在Android端读取修改Json数据
首先我们需要下载一个文件 LitJson.dll(下载链接 ps: 是用自己的百度云盘下载的如果链接过时,请留言或自行下载, 密码: 5foa) 另外,由于我们要发布到安卓手机上,所以需要配置Jar和 ...
- 服务器端json数据文件分割合并解决方案
问题引入 Json 是什么就不多说了,本文把Json理解成一种协议. 印象之中,Json貌似是前端的专属,其实不然,服务器端组织数据,依然可以用Json协议. 比如说,某公司有一套测评题目(基于Jso ...
- js读取解析JSON数据
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,采用完全独立于语言的文本格式,是理想的数据交换格式.同时,JSON是 JavaScript 原生格式,这意 ...
- 静态页面中如何传json数据
首页传递参数组装成json数据,再编码 var param="{type:'"+type+"',text:'"+select_text+"',sele ...
- C# 读取网页JSON数据
场景描述: 公司和别的系统需要对接,现在对方提供一个网址,数据都是json字符串,我需要对json数据进行处理. 提供的json数据如下格式 一.读取网址中的json数据 public string ...
- js读取解析JSON数据(转)
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,采用完全独立于语言的文本格式,是理想的数据交换格式.同时,JSON是 JavaScript 原生格式,这意 ...
随机推荐
- zipalign 文件路径问题
在使用zipalign,对Android程序进行打包,有些时候可能提示找不到zipalign ,可以复制一份放在相应的文件夹就行了 windows: 如果缺少zipalign,在网上找到相应的文件放在 ...
- DAG上的动态规划
嵌套矩形问题(最长路及其字典序)有n个举行,选出尽量多的矩阵排成一排,使得除了最后一个之外,每一个矩形可以嵌套在下一个矩形内,并且打印 #include <iostream> #inclu ...
- Swift - 本地数据的保存与加载(使用NSCoder将对象保存到.plist文件)
下面通过一个例子将联系人数据保存到沙盒的“documents”目录中.(联系人是一个数组集合,内部为自定义对象). 功能如下: 1,点击“保存”将联系人存入userList.plist文件中 2,点击 ...
- Type Unknown error: java.lang.NullPointerException
Android 项目开发的时候 出现: Description Resource Path Location Type Unknown error: java.lang.NullPointerExce ...
- CodeForces 371C Hamburgers
B题又耽误时间了...人太挫了.... C. Hamburgers time limit per test 1 second memory limit per test 256 megabytes i ...
- 网络编程Socket之TCP之close/shutdown具体解释(续)
接着上一篇网络编程Socket之TCP之close/shutdown具体解释 如今我们看看对于不同情况的close的返回情况和可能遇到的一些问题: 1.默认操作的close 说明:我们已经知道writ ...
- Handler和HandlerThread
1.什么是Handler? SDK中关于Handler的说明例如以下: A Handler allows you to sendand process Messageand Runnable obje ...
- Swift - 类型属性(类静态属性)和类方法(类静态方法)
1,结构体struct和枚举enum的静态属性,静态方法使用static关键字 1 2 3 4 5 6 7 8 9 10 struct Account { var amount : Doub ...
- c/c++数组名和指针区别深入探索
指针是C/C++语言的特色,而数组名与指针有太多的相似,甚至很多时候,数组名可以作为指针使用.于是乎,很多程序设计者就被搞糊涂了.而许多的大学老师,他们在C语言的教学过程中也错误得给学生讲解:&quo ...
- 300M无线路由器 TL-WR842N - TP-LINK官方网站
300M无线路由器 TL-WR842N - TP-LINK官方网站 300M无线路由器TL-WR842N 11N无线技术.300Mbps无线速率 2x2MIMO架构.CCA技术,提升无线稳定性.扩大无 ...