リモートjsonフォーマットデータの読み出し

4821 ワード

リモートJSON形式データの読み出し及びリモートデータサービスの構築.
最初のバックグラウンド構築からIPHONEクライアントコードの作成、データへのアクセスまで一つ一つ提示される.
1:バックグラウンドデータの構築
1.1:IISに仮想ディレクトリを作成する
1.2:VSを使用してWebアプリケーションを作成する.ここで私はVS 2008 IDEを使用する.
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 peopleList = new List();
        for (int i = 0; i < 10; i++)
        {
            People people = new People() {Name = "name"+ i };
            peopleList.Add(people);
        }
       //System.Web.Extensionsの参照 .Net 3.5フレームワーク
        JavaScriptSerializer serializer = new JavaScriptSerializer();
       //へんかん
        var jsonData = serializer.Serialize(peopleList);
        string result = "{\""+ "data"+ "\":";
        result += jsonData;
        result += "}";
       //戻る
        context.Response.Write;//要求を返すJSONデータ文字列
    }
    public class People//データModelを定義します.ここでは1つの属性を定義するだけです.もちろん、複数の属性を定義することができます.
    {
        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"}]}

第2部: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
#import "HttpConnectionDelegate.h"
/*
データアクセスインタフェースクラス
主にバックグラウンドデータにアクセスするサービスを提供します
create data 2011-08-15
*/
@interface HttpConnection : NSObject //ここでNSObjectクラスを継承し、
{
    NSMutableData *_buf;
    idconnectionDelegate;//データにアクセスするための委任変数を定義
    BOOL _isHttpResponseOK;
}
#pragma mark --
#pragma mark property
#pragma mark --
@property(nonatomic,retain) id connectionDelegate;
#pragma mark --
#pragma mark IBAction
#pragma mark --
-(void)Send:(NSString *)url;
@end
2.2:HttpConnectionDelegate.hという名前のプロトコル(委任)ファイルを新規作成し、次のコードを追加します.
#import
@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 !