将 JSON 与 xcode 一起使用(从数据库返回用户信息)
Posted
技术标签:
【中文标题】将 JSON 与 xcode 一起使用(从数据库返回用户信息)【英文标题】:Using JSON with xcode (return user information from database) 【发布时间】:2014-09-13 06:57:01 【问题描述】:我正在尝试创建登录过程(目前正在运行),同时,我想“加载”用户统计信息(这些统计信息在我的数据库中)。我正在尝试使用 JSON,但我不是这门语言的专家,我需要一些帮助。
首先,我想知道我这样做是否正确,因为它没有返回任何值(NULL)。你可以看到我的php文件,其中设置了JSON代码。
一切正常吗?如何使用 JSON 将值传递给 xcode? 就像我说的,我需要一些帮助,因为我从来没有使用过 JSON,而且我不确定我这样做是否正确。
这是我的登录 PHP 文件:(当用户点击“登录”按钮时它会启动)。
<?php
header('Content-type: application/json');
if($_POST)
$DB_HostName = "localhost";
$DB_Name = "db";
$DB_User = "user";
$DB_Pass = "pass";
$userName = $_POST["username"];
$password = $_POST["password"];
$sql = "select * from user where userName = '$userName' and password = '$password';";
$con = mysql_connect($DB_HostName,$DB_User,$DB_Pass) or die(mysql_error());
mysql_select_db($DB_Name,$con) or die(mysql_error());
$res = mysql_query($sql,$con) or die(mysql_error());
$res1 = mysql_num_rows($res);
if ($res1>0)
//
$query = mysql_query("select * from user where userName = '$userName' and password = '$password';");
while ($row = mysql_fetch_array($query))
$id=$row['userID'];
$query2 = mysql_query("select * from user_stats where userID = '$id';");
while ($row2 = mysql_fetch_array($query2))
$followers=$row2['followers'];
$stars=$row2['stars'];
$photos=$row2['photos'];
$data=$followers.'-'.$stars.'-'.$photos;
//die(json_encode(array("message" => "Getting user information succeeded.", "status" => '"success":1', "data" => $data), JSON_PRETTY_PRINT));
//
echo '"success":1,"data":'.$data.'';
else
echo '"success":0,"error_message":"Username and/or password is invalid.1"';
else
echo '"success":0,"error_message":"Username and/or password is invalid.2"';
ViewController.m
- (IBAction)loginClicked:(id)sender
@try
if([[_txtUsername text] isEqualToString:@""] || [[_txtPassword text] isEqualToString:@""] )
[self alertStatus:@"Porfavor, introduce el usuario y contraseña" :@"Error"];
else
NSString *post =[[NSString alloc] initWithFormat:@"username=%@&password=%@",[_txtUsername text],[_txtPassword text]];
NSLog(@"PostData: %@",post);
NSURL *url=[NSURL URLWithString:@"http://autograpp.com/login.php"];
NSData *postData = [post dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES];
NSString *postLength = [NSString stringWithFormat:@"%lu", (unsigned long)[postData length]];
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
[request setURL:url];
[request setHTTPMethod:@"POST"];
[request setValue:postLength forHTTPHeaderField:@"Content-Length"];
[request setValue:@"application/json" forHTTPHeaderField:@"Accept"];
[request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
[request setHTTPBody:postData];
[NSURLRequest setAllowsAnyHTTPSCertificate:YES forHost:[url host]];
NSError *error = [[NSError alloc] init];
NSHTTPURLResponse *response = nil;
NSData *urlData=[NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
NSLog(@"Response code: %ld", (long)[response statusCode]);
if ([response statusCode] >=200 && [response statusCode] <300)
NSString *responseData = [[NSString alloc]initWithData:urlData encoding:NSUTF8StringEncoding];
NSLog(@"Response ==> %@", responseData);
SBJsonParser *jsonParser = [SBJsonParser new];
NSDictionary *jsonData = (NSDictionary *) [jsonParser objectWithString:responseData error:nil];
NSLog(@"%@",jsonData);
NSInteger success = [(NSNumber *) [jsonData objectForKey:@"success"] integerValue];
NSLog(@"%ld",(long)success);
NSString *data = [(NSNumber *) [jsonData objectForKey:@"data"] stringValue];
NSLog(@"%@",data);
if(success == 1)
NSLog(@"Login SUCCESS");
//[self alertStatus:@"Bienvenido a Autograpp." :@"Datos correctos"];
[self performSegueWithIdentifier:@"Main" sender:self];
else
NSString *error_msg = (NSString *) [jsonData objectForKey:@"error_message"];
[self alertStatus:error_msg :@"Datos incorrectos"];
/*
NSString *jsonString = [[NSString alloc]initWithData:urlData encoding:NSUTF8StringEncoding];
NSData *JSONdata = [jsonString dataUsingEncoding:NSUTF8StringEncoding];
NSError *jsonError = nil;
if (JSONdata != nil)
NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:JSONdata options:0 error:&jsonError];
if (jsonError == nil)
// Set your text fields here.
NSLog(@"%@",dic);
*/
else
if (error) NSLog(@"Error: %@", error);
[self alertStatus:@"Ha ocurrido un problema inesperado" :@"Error"];
@catch (NSException * e)
NSLog(@"Exception: %@", e);
[self alertStatus:@"Error." :@"Error"];
问题是:当我尝试从 JSON 中读取值时,它们为 NULL。我认为这是因为我不是使用 JSON 代码的专家,并且出现了问题。
提前致谢。
【问题讨论】:
你有什么问题? 问题是:当我尝试从 JSON 中读取值时,它们为 NULL。我认为这是因为我不是使用 JSON 代码的专家并且有问题。你能帮助我吗?谢谢 N.A 在 post 方法中你看不到响应 【参考方案1】:做这样的事情
NSString *link = [NSString stringWithFormat:@"http://autograpp.com/login.php"];
ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:[NSURL URLWithString:link]];
[request setRequestMethod:@"POST"];
[request addRequestHeader:@"Content-Type" value:@"application/json"];
[request addRequestHeader:@"Accept" value:@"application/json"];
[request setPostValue:[NSString stringWithFormat:@"%@", _txtUsername.text] forKey:@"username"];
[request setPostValue:[NSString stringWithFormat:@"%@", _txtPassword.text] forKey:@"password"];
[request startSynchronous];
NSError *error = [request error];
if (!error)
NSString *jsonString = [request responseString];
if(kShowLog)
NSLog(@"response: %@", jsonString);
NSDictionary * returnDict = (NSDictionary *) [jsonString JSONValue];
【讨论】:
我试过你的代码,但我有很多错误。 “使用未声明的标识符 *request”。谢谢 N.A. 还有另一个问题:我的 PHP(JSON 代码)是否正确? 您必须根据自己的需要进行修改。对于 json,您无法在浏览器中检查响应。如果您想查看您的 json 对于 POST 是否正确。你可以看到用于 json 视图的 chrome 插件 再次感谢 N.A. 你说我必须根据我的项目更改代码,但我有点迷茫。什么是 ASIFormDataRequest?你能帮我完成我的项目吗?因为我不确定我是否正确返回了 JSON,而且我不知道如何从 xcode 读取值。谢谢。以上是关于将 JSON 与 xcode 一起使用(从数据库返回用户信息)的主要内容,如果未能解决你的问题,请参考以下文章
是否可以将参数化的测试用例数据与 Xcode 的 XCTest 框架一起使用?
将 xcodebuild 与 iOS 项目和 iOS 模拟器一起使用