• 远程json格式数据的读取


      远程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 !

  • 相关阅读:
    15:链表中倒数第K个节点
    14:调整数组顺序使奇数位于偶数的前面
    13:在O(1)时间内删除单向链表中的一个节点
    centos7下zookeeper集群安装部署
    zabbix3.2监控mysql
    解决关于confluence缓慢 字体乱码 宏乱码 编辑不能贴图等问题
    nginx日志文件的定时切割与归纳
    centos7安装sonarqube6.7 代码质量管理平台
    centos7下安装vnc更改vnc默认端口号
    centos7安装java环境和maven环境
  • 原文地址:https://www.cnblogs.com/xingchen/p/2139507.html
Copyright © 2020-2023  润新知