1

1 つのパラメーターを持つ 1 つの関数を持つ PHP で Web サービスを作成しました。バックエンドとして phpMyadmin を使用しています。データの取得にはjson形式を使用しています。Web サービスは完全に機能しています。この Web サービスを iPhone アプリで使用したいと考えています。1つのパラメーターを渡したい。rayWenderlichのチュートリアルも参考にしました。しかし、解決策を見つけることができません。私を助けてください。

これは私のWebサービスコードです:

<?php

echo getdata($_REQUEST['lastupdate']);

function getdata($lastupdatedate){

    $json = '{"foo-bar": 12345}';       
    $obj = json_decode($json);
    //print $obj->{'foo-bar'}; // 12345    

    $con = mysql_connect("localhost","un","Password");          

    if (!$con){
       die('Could not connect: ' . mysql_error());
    }

    //print_r($con);            
    mysql_select_db("roster", $con);

    $query = "select * from rates where LastUpdated = '".$lastupdatedate."' order by LastUpdated limit 1";    
    $rs = mysql_query($query) or die($query);

    //print_r($rs);

    while($row=mysql_fetch_assoc($rs)){    
        $record[] = $row;    
    }
    $data = json_encode($record);

    header('Cache-Control: no-cache, must-revalidate');    
    header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');    
    header('Content-type: application/json');

    return $data;    
}

Iphone アプリ側で、以下のコードを試しました:

-(void)GETJSONDATA
{
    SBJSON *json = [SBJSON new];
    json.humanReadable = YES;
    responseData = [NSMutableData data];

    NSString *service = @"";
    NSString *str;
    str = @"LastUpdated";


    NSString *requestString = [NSString stringWithFormat:@"{\"LastUpdated\":\"%@\"}",str];

    // [[NSUserDefaults standardUserDefaults] setValue:nil forKey:@"WRONGANSWER"];

    NSLog(@"request string:%@",requestString);
    NSData *requestData = [NSData dataWithBytes: [requestString UTF8String] length: [requestString length]];


    NSString *fileLoc = [[NSBundle mainBundle] pathForResource:@"URLName" ofType:@"plist"];
    NSDictionary *fileContents = [[NSDictionary alloc] initWithContentsOfFile:fileLoc];
    NSString *urlLoc = [fileContents objectForKey:@"URL"];
    urlLoc = [urlLoc stringByAppendingString:@"?lastupdate=2012-09-01 01:00:00"];
    NSLog(@"URL : %@",urlLoc);

    NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL: 
                                    [NSURL URLWithString: urlLoc]];  
    NSString *postLength = [NSString stringWithFormat:@"%d", [requestData length]];
    [request setHTTPMethod: @"POST"];
    [request setValue:postLength forHTTPHeaderField:@"Content-Length"];
    [request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
    [request setHTTPBody: requestData];

    NSError *respError = nil;
    NSData *returnData = [NSURLConnection sendSynchronousRequest: request returningResponse: nil error: &respError ];


    if (respError) 
    {
        //        NSString *msg = [NSString stringWithFormat:@"Connection failed! Error - %@ %@",
        //                         [respError localizedDescription],
        //                         [[respError userInfo] objectForKey:NSURLErrorFailingURLStringErrorKey]]; 
        UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"ACTEC" 
                                                            message:@"check your network connection" delegate:self cancelButtonTitle:@"OK" 
                                                  otherButtonTitles:nil];
        [alertView show];


    } 
    else
    {
        NSUserDefaults *dd = [NSUserDefaults standardUserDefaults];
        NSString *responseString = [[NSString alloc] initWithData:returnData encoding: NSUTF8StringEncoding];
        NSLog(@"Resp : %@",responseString);

        NSDictionary *results = [responseString JSONValue];
        NSLog(@"results=%@",results);

}
}
4

1 に答える 1

0

ライブラリの使用を検討することをお勧めします。AFNetworkingは AFHTTPClient と呼ばれるクラスを提供します。このクラスを使用すると、Restful Web サービスに接続して簡単に呼び出すことができます。エンドポイントを想定すると、次のようなことができます。

NSDictionary *body = [NSDictionary dictionaryWitObject:@"LastUpdated" forKey:@"LastUpdated"];

NSString *fileLoc = [[NSBundle mainBundle] pathForResource:@"URLName" ofType:@"plist"];
NSDictionary *fileContents = [[NSDictionary alloc] initWithContentsOfFile:fileLoc];
NSString *urlLoc = [fileContents objectForKey:@"URL"];
urlLoc = [urlLoc stringByAppendingString:@"?lastupdate=2012-09-01 01:00:00"];    

AFHTTPClient *client = [AFHTTPClient clientWithBaseURL:[NSURL URLWithString:urlLoc]];

[client postPath:@"endpoint" parameters:body success:^(AFHTTPRequestOperation *operation, id responseObject) {
    // Do something with the responseObject

} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
    // Log the error and proceed

}];  

ここでドキュメントを見つけることができます: http://engineering.gowalla.com/AFNetworking/Classes/AFHTTPClient.html

于 2012-10-03T05:25:52.660 に答える