APILinks.txt
Read:
http://.../JSON/student.php?action=list
Add:
http://…/JSON/student.php?action=add&Name=Alex&Age=16&Perc=90
Edit:
http://.../JSON/student.php?action=edit&Name=Alex&Age=16&Perc=90.86&StudentId=3
Delete:
http://.../JSON/student.php?action=delete&StudentId=3
student.php (Json File)
<?php
$DB_Host = "localhost";
$DB_Name =
"test_ios_trainees";
$DB_Username = "root";
$DB_Password = "root123";
$WEBSITE_URL =
"http://.../JSON/";
$con = mysql_connect($DB_Host,
$DB_Username, $DB_Password) or die(mysql_errno());
$db = mysql_select_db($DB_Name,
$con) or die(mysql_error());
$action = (
isset($_REQUEST["action"]) &&
trim($_REQUEST["action"]) != "" ) ?
trim($_REQUEST["action"]) : "";
if($action == "list")
{
$jsonRecArr = array();
$sqry = "SELECT *
FROM students ORDER BY Name ASC";
$sres =
mysql_query($sqry) or die("can not select form students -
".mysql_error());
while($srow =
mysql_fetch_array($sres))
{
$recStr = '{"StudentId":"'.trim($srow["StudentId"]).'",
"Name":"'.trim($srow["Name"]).'",
"Age":"'.trim($srow["Age"]).'",
"Perc":"'.trim($srow["Perc"]).'"}';
array_push($jsonRecArr,
$recStr);
}
mysql_free_result($sres);
$json =
'{"students":['.implode(",", $jsonRecArr).']}';
echo $json;
exit;
}
else if($action == "add")
{
if( isset($_REQUEST["Name"])
&& trim($_REQUEST["Name"]) != "" &&
isset($_REQUEST["Age"])
&& trim($_REQUEST["Age"]) != "" &&
isset($_REQUEST["Perc"])
&& trim($_REQUEST["Perc"]) != "")
{
$iqry =
"INSERT INTO students SET
Name
= '".trim($_REQUEST["Name"])."',
Age
= '".(int)trim($_REQUEST["Age"])."',
Perc
= '".(float)trim($_REQUEST["Perc"])."'";
mysql_query($iqry)
or die("can not insert into students - ".mysql_error());
echo
"OK";
exit;
}
else
{
echo
"INVALID PARAMETER";
exit;
}
}
else if($action == "edit")
{
if( isset($_REQUEST["StudentId"])
&& trim($_REQUEST["StudentId"]) != "" &&
isset($_REQUEST["Name"])
&& trim($_REQUEST["Name"]) != "" &&
isset($_REQUEST["Age"])
&& trim($_REQUEST["Age"]) != "" &&
isset($_REQUEST["Perc"])
&& trim($_REQUEST["Perc"]) != "")
{
$iqry =
"UPDATE students SET
Name
= '".trim($_REQUEST["Name"])."',
Age
= '".(int)trim($_REQUEST["Age"])."',
Perc
= '".(float)trim($_REQUEST["Perc"])."'
WHERE
StudentId = '".trim($_REQUEST["StudentId"])."'";
mysql_query($iqry)
or die("can not update students - ".mysql_error());
echo
"OK";
exit;
}
else
{
echo
"INVALID PARAMETER";
exit;
}
}
else if($action ==
"delete")
{
if( isset($_REQUEST["StudentId"])
&& trim($_REQUEST["StudentId"]) != "")
{
$iqry =
"DELETE FROM students WHERE StudentId =
'".trim($_REQUEST["StudentId"])."'";
mysql_query($iqry)
or die("can not delete from students - ".mysql_error());
echo
"OK";
exit;
}
else
{
echo
"INVALID PARAMETER";
exit;
}
}
else
{
echo "Nothing is
here for you!";
exit;
}
?>
Import JSON Whole file for Framework
AppDelegate.h
@property (nonatomic, retain) NSString *apiURL;
AppDelegate.m
@synthesize apiURL;
In didfinisj=h method..
apiURL =
@"http://.../JSON/";
ViewController.h
#import <UIKit/UIKit.h>
@class AppDelegate;
@interface ViewController : UIViewController
<UITableViewDataSource, UITableViewDelegate>
{
AppDelegate
*appDel;
NSMutableArray
*recordsArr;
}
@property (nonatomic, retain) IBOutlet UITableView
*recordTblView;
@property (nonatomic, retain) IBOutlet
UIActivityIndicatorView *processActView;
@end
ViewController.m
#import "ViewController.h"
#import "AppDelegate.h"
#import "Student.h"
#import "MyFunctions.h"
#import "StudentCellViewController.h"
@implementation ViewController
@synthesize recordTblView,
processActView;
- (void)viewDidLoad
{
[super
viewDidLoad];
appDel =
(ip24AppDelegate *)[[UIApplication sharedApplication] delegate];
processActView.hidden = NO;
NSOperationQueue
*queue = [NSOperationQueue new];
NSInvocationOperation *operation = [[NSInvocationOperation alloc]
initWithTarget:self selector:@selector(recordsRequest) object:nil];
[queue
addOperation:operation];
[operation
release];
}
- (void)didReceiveMemoryWarning
{
[super
didReceiveMemoryWarning];
}
- (void)recordsRequest
{
NSString *post
=[NSString stringWithFormat:@""];
NSData *postData =
[post dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES];
NSString
*postLength = [NSString stringWithFormat:@"%d", [postData length]];
NSMutableURLRequest *request = [[[NSMutableURLRequest alloc] init] autorelease];
[request
setURL:[NSURL URLWithString:[NSString
stringWithFormat:@"%@student.php?action=list", appDel.apiURL]]];
[request
setHTTPMethod:@"POST"];
[request
setValue:postLength forHTTPHeaderField:@"Content-Length"];
[request setValue:@"application/x-www-form-urlencoded"
forHTTPHeaderField:@"Content-Type"];
[request
setHTTPBody:postData];
NSURLResponse
*response;
NSData
*urlData=[NSURLConnection sendSynchronousRequest:request
returningResponse:&response error:nil];
NSString *data=
[[NSString alloc]initWithData:urlData encoding:NSUTF8StringEncoding];
[self
performSelectorOnMainThread:@selector(recordResponse:) withObject:data
waitUntilDone:NO];
}
- (void)recordResponse:(NSString *)str
{
recordsArr =
[Student readRecords:str];
[recordTblView
reloadData];
processActView.hidden = YES;
}
#pragma mark - Table Methods
- (CGFloat)tableView:(UITableView *)tableView
heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
return 100;
}
- (NSInteger)tableView:(UITableView *)tableView
numberOfRowsInSection:(NSInteger)section
{
return
recordsArr.count;
}
- (UITableViewCell *)tableView:(UITableView *)tableView
cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString
*CellIdentifier = @"Cell";
UITableViewCell
*cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault
reuseIdentifier:CellIdentifier];
Student *sObj =
[recordsArr objectAtIndex:indexPath.row];
StudentCellViewController *studentCellVC = [[StudentCellViewController
alloc] init];
studentCellVC.studentObj = sObj;
[cell.contentView
addSubview:studentCellVC.view];
return cell;
}
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle
forRowAtIndexPath:(NSIndexPath *)indexPath
{
Student *sObj =
[recordsArr objectAtIndex:indexPath.row];
NSOperationQueue
*queue = [NSOperationQueue new];
NSInvocationOperation *operation = [[NSInvocationOperation alloc]
initWithTarget:self selector:@selector(deleteRecordRequest:) object:sObj];
[queue
addOperation:operation];
[recordsArr
removeObjectAtIndex:indexPath.row];
[recordTblView
beginUpdates];
[recordTblView
deleteRowsAtIndexPaths:[[NSArray alloc] initWithObjects:indexPath, nil]
withRowAnimation:UITableViewRowAnimationMiddle];
[recordTblView
endUpdates];
}
- (void)dealloc
{
[recordTblView
release];
[processActView
release];
[super dealloc];
}
@end
MyFunctions.h
#import <Foundation/Foundation.h>
@interface MyFunctions : NSObject
+ (NSString *)trim:(NSString *)stringToTrim;
@end
MyFunctions.m
#import "MyFunctions.h"
@implementation MyFunctions
+ (NSString *)trim:(NSString *)stringToTrim
{
return
[stringToTrim stringByTrimmingCharactersInSet:[NSCharacterSet
whitespaceAndNewlineCharacterSet]];
}
@end
Student.h
#import <Foundation/Foundation.h>
@interface Student : NSObject
@property (nonatomic, retain) NSString *StudentId,
*Name,
*Age,
*Perc;
+ (NSMutableArray *)readRecords:(NSString *)dataStr;
@end
Student.m
#import "Student.h"
#import "SBJson.h"
#import "NSObject+SBJson.h"
#import "MyFunctions.h"
@implementation Student
@synthesize StudentId,
Name,
Age,
Perc;
+ (NSMutableArray *)readRecords:(NSString *)dataStr
{
NSMutableArray
*recArr = [[NSMutableArray alloc] init];
NSDictionary *json
= [dataStr JSONValue];
NSArray *items =
[json valueForKey:@"students"];
NSEnumerator
*enumerator = [items objectEnumerator];
NSDictionary
*item;
while((item =
(NSDictionary *)[enumerator nextObject]))
{
Student *sObj
= [[Student alloc] init];
sObj.StudentId
= [MyFunctions trim:[item objectForKey:@"StudentId"]];
sObj.Name =
[MyFunctions trim:[item objectForKey:@"Name"]];
sObj.Age =
[MyFunctions trim:[item objectForKey:@"Age"]];
sObj.Perc =
[MyFunctions trim:[item objectForKey:@"Perc"]];
[recArr
addObject:sObj];
}
return recArr;
}
@end
StudentCellViewController.h
#import <UIKit/UIKit.h>
@class Student;
@interface StudentCellViewController : UIViewController
@property (nonatomic, retain) IBOutlet UILabel *NameLbl,
*AgeLbl,
*PercLbl;
@property (nonatomic, retain) Student *studentObj;
@end
StudentCellViewController.m
#import "StudentCellViewController.h"
#import "Student.h"
#import "MyFunctions.h"
@implementation StudentCellViewController
@synthesize NameLbl,
AgeLbl,
PercLbl;
@synthesize studentObj;
- (id)initWithNibName:(NSString *)nibNameOrNil
bundle:(NSBundle *)nibBundleOrNil
{
self = [super
initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
// Custom
initialization
}
return self;
}
- (void)viewDidLoad
{
[super
viewDidLoad];
NameLbl.text =
[MyFunctions trim:studentObj.Name];
AgeLbl.text = [NSString
stringWithFormat:@"%@yr", [MyFunctions trim:studentObj.Age]];
PercLbl.text =
[NSString stringWithFormat:@"%@%%", [MyFunctions
trim:studentObj.Perc]];
}
- (void)didReceiveMemoryWarning
{
[super
didReceiveMemoryWarning];
// Dispose of any resources that can be
recreated.
}
@end