远程JSON格式数据的读取 以及远程数据服务的搭建。
从最初的后台搭建到IPHONE客户端代码的编写、数据的访问都一一呈现。
1:后台数据的搭建
1.1:在IIS上创建一个虚拟目录
1.2:使用VS创建一个Web应用程序,这里我使用的是VS2008IDE
1.3:向工程中添加一个扩展名称为ashx的文件,我们就是使用这个文件来提供JSON数据访问服务。
1.4:然后运行程序,确保该文件可用。
1.5:编写后台代码,参考代码如下所示:
这个后代的代码,是我参考一个网友写的,并做了部分的修改,地址如下所示:
http://www.cnblogs.com/xinjian/archive/2010/11/23/1885225.html
<%@ WebHandler Language="C#" Class="indexHandler" %>
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Services;
using System.Web.Script.Serialization;
public class indexHandler : IHttpHandler
{
public void ProcessRequest(HttpContext context)
{
context.Response.ContentType = "text/plain";
//初始化数据
List<People> peopleList = new List<People>();
for (int i = 0; i < 10; i++)
{
People people = new People() {Name = "name" + i };
peopleList.Add(people);
}
//引用System.Web.Extensions .net3.5框架
JavaScriptSerializer serializer = new JavaScriptSerializer();
//转换
var jsonData = serializer.Serialize(peopleList);
string result = "{\"" + "data" + "\":";
result += jsonData;
result += "}";
//返回
context.Response.Write(result);//返回请求的JSON数据字符串
}
public class People//定义一个数据Model,这里仅仅是定义一个属性,当然我们是可以定义多个属性的。
{
public string Name
{
set;
get;
}
}
public bool IsReusable
{
get
{
return false;
}
}
}
运行效果如下所示,这个是打印到页面的效果
{"data":[{"Name":"name0"},{"Name":"name1"},{"Name":"name2"},{"Name":"name3"},{"Name":"name4"},{"Name":"name5"},{"Name":"name6"},{"Name":"name7"},{"Name":"name8"},{"Name":"name9"}]}
第二部分:IPHONE前端代码的编写
2:IPHONE前台代码的访问
2.1:打卡XBOX创建的工程,添加一个类文件,名称为:HttpConnection的文件
添加如下所示的代码:
//
// HttpConnection.h
// GIITicket
//
// Created by infohold infohold_Mac3 on 11-8-15.
// Copyright 2011 __MyCompanyName__. All rights reserved.
//
#import <Foundation/Foundation.h>
#import "HttpConnectionDelegate.h"
/*
数据访问接口类
主要提供访问后台数据的服务
create data 2011-08-15
*/
@interface HttpConnection : NSObject //这里继承与 NSObject类,
{
NSMutableData *_buf;
id<HttpConnectionDelegate> connectionDelegate;//定义一个委托变量,用来访问数据
BOOL _isHttpResponseOK;
}
#pragma mark --
#pragma mark property
#pragma mark --
@property(nonatomic,retain) id<HttpConnectionDelegate> connectionDelegate;
#pragma mark --
#pragma mark IBAction
#pragma mark --
-(void)Send:(NSString *)url;
@end
2.2:新建一个名称为HttpConnectionDelegate.h的协议(委托)文件,并添加如下所示的代码
#import <UIKit/UIKit.h>
@protocol HttpConnectionDelegate
@optional
@optional
-(void)onRecivedData:(NSData *)data;
-(void)onRecivedDataError:(NSData *)data;
@end
2.3:调用这个数据反问类对象
我们在一个需要读取数据的地方调用该类对象
参考代码如下所示:
-(IBAction)Go
{
NSString *url = @"http://YourIPAddress/GIITicketServer/indexHandler.ashx";//我们搭建的后台数据服务地址,
[request Send:url];
}
-(void)onRecivedData:(NSData *)data//接受到数据后触发的函数,也可以说成是数据的解析
{
CJSONDeserializer *jsonDeserializer=[CJSONDeserializer deserializer];
NSError *error=nil;
NSDictionary *resultDictionary=[jsonDeserializer deserialize:data error:error];
if (error)
{
return nil;
}
NSArray *tt = [resultDictionary objectForKey:@"data"];
NSDictionary *keyValue = [tt objectAtIndex:0];
NSString *ttt = [keyValue objectForKey:@"Name"];//第一个键值对的名称名称 “name0”
}
PS:该篇博客仅仅是写了一个大概,有些细节的东西我就省略掉了,但是这个并不能说明这些细节的东西不重要。
另外,这里仅仅是写到如何显示从远程读取的数据,这个需要在调试的状态下才能看到。
如果有什么不理解的地方请联系我,交流!
THE END !