どうかチェックnetconnectionが利用可能なiPhone?
-
28-10-2019 - |
質問
ってなりたいとログイン形式のユーザー名とパスワード textfields
.ユーザー入力ユーザー名とパスワードをクリックし、送信ボタンは、その行くサーバAPIデータベースかどうかを確かめのユーザーが有効にならない。場合は接続しないその価値をいちいちチェックSQLiteデータベースです。
場合にはSQLiteデータベースのユーザがユーザー名とパスワードを検証し、ユーザーは入場を用いたそうにしている方等はご登録いただけます。また、以下のコードが現在、そのまま混乱がすべて入った。
私はチェックの両方のサーバー接続とSQLiteの接続です。私の答えはご利用いただくユーザはログインもそのユーザー名とパスワードを必ず確認してください最初からサーバーはSQLiteデータベースです。場合はサーバーをオフにしてユーザー名とパスワードをチェックSQLiteデータベースです。
これが私のコード:
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(checkNetworkStatus:) name:kReachabilityChangedNotification object:nil];
internetReachable = [[Reachability reachabilityForInternetConnection] retain];
[internetReachable startNotifier];
// check if a pathway to a random host exists
hostReachable = [[Reachability reachabilityWithHostName: @"www.apple.com"] retain];
[hostReachable startNotifier];
コールバックは、以下の
- (void) checkNetworkStatus:(NSNotification *)notice
{
// called after network status changes
NetworkStatus internetStatus = [internetReachable currentReachabilityStatus];
switch (internetStatus)
{
case NotReachable:
{
break;
}
case ReachableViaWiFi:
{
break;
}
case ReachableViaWWAN:
{
break;
}
}
NetworkStatus hostStatus = [hostReachable currentReachabilityStatus];
switch (hostStatus)
{
case NotReachable:
{
break;
}
case ReachableViaWiFi:
{
break;
}
case ReachableViaWWAN:
{
break;
}
}
}
これが私のapiコントローラは、私は取得価値からのAPIサーバーに挿入す値はSQLiteデータベース:
//
// apicontroller.m
// apitest
//
// Created by raji.nair on 6/10/11.
// Copyright 2011 __MyCompanyName__. All rights reserved.
//
#import "apicontroller.h"
#import "Result.h"
#import "global.h"
#import <sqlite3.h>
#define DATABASE_NAME @"journey.sqlite"
#define DATABASE_TITLE @"journey"
@implementation apicontroller
@synthesize txtUserName;
@synthesize txtPassword;
@synthesize txtfirstName;
@synthesize txtlast;
@synthesize txtEmail;
@synthesize webData;
- (NSString *) getWritableDBPath {
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory , NSUserDomainMask, YES);
NSString *documentsDir = [paths objectAtIndex:0];
return [documentsDir stringByAppendingPathComponent:DATABASE_NAME];
}
-(void)createEditableCopyOfDatabaseIfNeeded
{
// Testing for existence
BOOL success;
NSFileManager *fileManager = [NSFileManager defaultManager];
NSError *error;
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,
NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *writableDBPath = [documentsDirectory stringByAppendingPathComponent:DATABASE_NAME];
NSLog(@"%@",writableDBPath);
success = [fileManager fileExistsAtPath:writableDBPath];
if (success)
return;
// The writable database does not exist, so copy the default to
// the appropriate location.
NSString *defaultDBPath = [[[NSBundle mainBundle] resourcePath]
stringByAppendingPathComponent:DATABASE_NAME];
success = [fileManager copyItemAtPath:defaultDBPath
toPath:writableDBPath
error:&error];
if(!success)
{
NSAssert1(0,@"Failed to create writable database file with Message : '%@'.",
[error localizedDescription]);
}
}
-(void)sendRequest
{
UIDevice *device = [UIDevice currentDevice];
NSString *udid = [device uniqueIdentifier];
NSString *sysname = [device systemName];
NSString *sysver = [device systemVersion];
NSString *model = [device model];
NSLog(@"idis:%@",[device uniqueIdentifier]);
NSLog(@"system nameis :%@",[device systemName]);
NSLog(@"System version is:%@",[device systemVersion]);
NSLog(@"System model is:%@",[device model]);
NSLog(@"device orientation is:%d",[device orientation]);
NSString *post = [NSString stringWithFormat:@"Loginkey=%@&Password=%@&DeviceCode=%@&Firmware=%@&IMEI=%@",txtUserName.text,txtPassword.text,model,sysver,udid];
NSData *postData = [post dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES];
NSString *postLength = [NSString stringWithFormat:@"%d", [postData length]];
NSLog(@"%@",postLength);
NSMutableURLRequest *request = [[[NSMutableURLRequest alloc] init] autorelease];
[request setURL:[NSURL URLWithString:@"http://192.168.0.68:91/JourneyMapperAPI?RequestType=Login"]];
[request setHTTPMethod:@"POST"];
[request setValue:postLength forHTTPHeaderField:@"Content-Length"];
[request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
[request setHTTPBody:postData];
NSURLConnection *theConnection = [[NSURLConnection alloc] initWithRequest:request delegate:self];
if (theConnection) {
webData = [[NSMutableData data] retain];
NSLog(@"%@",webData);
}
else
{
}
}
-(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
{
[webData setLength: 0];
}
-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
[webData appendData:data];
}
-(void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
{
[connection release];
[webData release];
}
-(void)connectionDidFinishLoading:(NSURLConnection *)connection
{
NSString *loginStatus = [[NSString alloc] initWithBytes: [webData mutableBytes] length:[webData length] encoding:NSUTF8StringEncoding];
NSLog(@"%@",loginStatus);
NSString *json_string = [[NSString alloc] initWithData:webData encoding:NSUTF8StringEncoding];
NSDictionary *result = [json_string JSONValue];
NSArray *values = [result objectForKey:@"Result"];
NSMutableArray *results = [[NSMutableArray alloc] init];
for (int index = 0; index<[values count]; index++) {
NSMutableDictionary * value = [values objectAtIndex:index];
Result * result = [[Result alloc] init];
result.UserID = [value objectForKey:@"UserId"];
result.FirstName = [value objectForKey:@"FirstName"];
result.LastName =[value objectForKey:@"LastName"];
result.Email =[value objectForKey:@"Email"];
result.ProfileImage =[value objectForKey:@"ProfileImage"];
result.ThumbnailImage =[value objectForKey:@"ThumbnailImage"];
result.DeviceInfoId =[value objectForKey:@"DeviceInfoId"];
NSLog(@"%@",result.UserID);
[results addObject:result];
[result release];
}
for (int index = 0; index<[results count]; index++) {
Result * result = [results objectAtIndex:index];
//save the object variables to database here
[self createEditableCopyOfDatabaseIfNeeded];
NSString *filePath = [self getWritableDBPath];
sqlite3 *database;
if(sqlite3_open([filePath UTF8String], &database) == SQLITE_OK) {
NSDate *dt = [NSDate date]; //get current date
NSString *timestamp = [dt description];
NSString *journeyid = [NSString stringWithFormat:@"%@_%@_%@", result.UserID, result.DeviceInfoId, timestamp];
const char *sqlStatement = "insert into UserInformation(UserID,DeviceId,FirstName,Email,JourneyID) VALUES (?,?,?,?,?)";
sqlite3_stmt *compiledStatement;
if(sqlite3_prepare_v2(database, sqlStatement, -1, &compiledStatement, NULL) == SQLITE_OK) {
sqlite3_bind_text( compiledStatement, 1, [result.UserID UTF8String],-1,SQLITE_TRANSIENT);
sqlite3_bind_text(compiledStatement, 2, [result.DeviceInfoId UTF8String],-1,SQLITE_TRANSIENT);
sqlite3_bind_text (compiledStatement, 3, [result.FirstName UTF8String],-1,SQLITE_TRANSIENT);
sqlite3_bind_text (compiledStatement, 4, [result.Email UTF8String],-1,SQLITE_TRANSIENT);
sqlite3_bind_text(compiledStatement, 5, [journeyid UTF8String], -1, SQLITE_TRANSIENT);
}
if(sqlite3_step(compiledStatement) != SQLITE_DONE ) {
NSLog( @"Save Error: %s", sqlite3_errmsg(database) );
}
else {
UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"UIAlertView" message:@"Record added" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
[alert show];
[alert release];
alert = nil;
}
sqlite3_finalize(compiledStatement);
}
sqlite3_close(database);
}
[loginStatus release];
[connection release];
[webData release];
}
-(IBAction)click:(id)sender
{
[self sendRequest];
}
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
[txtfirstName resignFirstResponder];
[txtlast resignFirstResponder];
[txtUserName resignFirstResponder];
[txtPassword resignFirstResponder];
[txtEmail resignFirstResponder];
}
// Implement viewDidLoad to do additional setup after loading the view, typically from a nib.
- (void)viewDidLoad {
[super viewDidLoad];
//[self sendRequest];
}
- (void)didReceiveMemoryWarning {
// Releases the view if it doesn't have a superview.
[super didReceiveMemoryWarning];
// Release any cached data, images, etc. that aren't in use.
}
- (void)viewDidUnload {
[super viewDidUnload];
// Release any retained subviews of the main view.
// e.g. self.myOutlet = nil;
}
- (void)dealloc {
[super dealloc];
}
@end
このクラスが作っnsstring変数のjsonオブジェクト:
//
// Result.h
// apitest
//
// Created by pradeep.yadav on 6/14/11.
// Copyright 2011 __MyCompanyName__. All rights reserved.
//
#import <Foundation/Foundation.h>
//TokenID":"Vao13gifem","isError":false,"ErrorMessage":"","Result":[{"UserId":"153","FirstName":"Rocky","LastName":"Yadav","Email":"rocky@itg.com","ProfileImage":null,"ThumbnailImage":null,"DeviceInfoId":"12"}],"ErrorCode":900}
//Terminating in response to SpringBoard's termination.
@interface Result : NSObject {
NSString * UserID;
NSString *FirstName;
NSString *LastName;
NSString *Email;
NSString *ProfileImage;
NSString *ThumbnailImage;
NSString *DeviceInfoId;
}
@property (nonatomic,retain) NSString *UserID;
@property (nonatomic,retain) NSString *FirstName;
@property (nonatomic,retain) NSString *LastName;
@property (nonatomic,retain) NSString *Email;
@property (nonatomic,retain) NSString *ProfileImage;
@property (nonatomic,retain) NSString *ThumbnailImage;
@property (nonatomic,retain) NSString *DeviceInfoId;
@end
//
// Result.m
// apitest
//
// Created by pradeep.yadav on 6/14/11.
// Copyright 2011 __MyCompanyName__. All rights reserved.
//
#import "Result.h"
@implementation Result
@synthesize UserID;
@synthesize FirstName;
@synthesize LastName;
@synthesize Email;
@synthesize ProfileImage;
@synthesize ThumbnailImage;
@synthesize DeviceInfoId;
- (void)dealloc {
[super dealloc];
[UserID release];
[FirstName release];
[LastName release];
[Email release];
[ProfileImage release];
[ThumbnailImage release];
[DeviceInfoId release];
}
@end
う場合のサーバAPIにはご利用によnetconnectionはその後の私のユーザー名とパスワードの値を取得および検証からのデータベースです。
解決
NSMutableURLRequest * serviceRequest = [NSMutableURLRequest requestWithURL:serviceUrl];
[serviceRequest setValue:@"text/xml" forHTTPHeaderField:@"Content-type"];
[serviceRequest setHTTPMethod:@"POST"];
[serviceRequest setHTTPBody:[xmlString dataUsingEncoding:NSUTF8StringEncoding]];
NSData *responseData;
NSURLResponse * serviceResponse;
NSError * serviceError;
responseData = [NSURLConnection sendSynchronousRequest:serviceRequest returningResponse:&serviceResponse error:&serviceError];
NSString *resp=[[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding];
NSLog(@"RETRIEVING:%@",resp);
if(responseData != NULL)
{
//connection exist
}
else
{
//Connection doesn't exist
}
他のヒント
ここでのショーに遅れましたが、これをチェックするための最良の解決策は到達可能性です。到達可能性はAppleによって「サンプルコード」として書かれていましたが、ネットワークステータスを優雅に処理するための最も完全な方法です。をチェックしてください リーチ可能性ガイド.
到達可能性の使用方法に関する情報を次に示します。 iOS 4のリーチ可能性ガイド
私はあなたの質問をレビューしました。以下のフローに従うべきだと思います:
ユーザーは、ログインフォームに「ユーザー名」と「パスワード」を入力します。
次に、最初にローカルデータベースをチェックします。
ユーザーが存在する場合、ユーザーはログインしてアプリにアクセスできます。
ユーザーが存在しない場合は、ライブサーバーから資格情報を確認してください。
ユーザーが有効な場合は、ローカルデータベースにユーザー名とパスワードを入力します。そのため、次回は直接ログインできます。
ユーザーが有効でない場合は、アクセスのメッセージを拒否します。
ここで、ネット接続をチェックするために:そのために、1つのWeb-View(Web-Viewは見えなくなります)を取ります。次に、のような単純なウェブサイトを開きます」http://www.google.com「また、Web-View Delegateメソッドを実装します。
Web-View Delegateメソッド:
- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error{
[self connectionFailed:error];
}
以下は「ConnectionFailed」関数です。
-(void)connectionFailed:(NSError *)error{
if ([error code] == -999) {
//show error alert, etc.
//NSLog(@"-999 Detected, Do Nothing");
//NSLog([error localizedDescription]);
}
else if([error code] == -1009 || [[error localizedDescription] isEqualToString:@"no Internet connection"]){
[self hideLoading];
[connectionView loadHTMLString:@"<body bgcolor=#58637C><br><br><br><br><font size=5 color=white>Please turn on your Internet connection to access this application.</font></body>" baseURL:nil];
[connectionView setFrame:CGRectMake(0.0, 0.0, 320.0, 431.0)];
[self.view addSubview:connectionView];
}
else if([error code] == -1001 || [[error localizedDescription] isEqualToString:@"timed out"]){
[self hideLoading];
[connectionView loadHTMLString:@"<body bgcolor=#58637C><br><br><br><br><font size=5 color=white>Request Timed Out.</font></body>" baseURL:nil];
[connectionView setFrame:CGRectMake(0.0, 0.0, 320.0, 431.0)];
[self.view addSubview:connectionView];
}
else if (error != NULL) {
[self hideLoading];
[connectionView loadHTMLString:@"<body bgcolor=#58637C><br><br><br><br><font size=5 color=white>Error loading page, Please try again later.</font></body>" baseURL:nil];
[connectionView setFrame:CGRectMake(0.0, 0.0, 320.0, 431.0)];
[self.view addSubview:connectionView];
}
else{
}
}
ここでは、ConnectionViewビューは別のWeb-Viewです。コードをUialerViewに置き換えるだけで、適切なメッセージに置き換えることができます。