WEB APP混合学习,写得有点粗糙,有啥米问题QQ: 285979593
WEB使用HTML5通过WEBVIEW通信,JS调用OBJECT-C或者OBJECT-C调用JS来交互,配合SQLITE数据库来实现一个登陆的功能。
- (
void
)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
NSString *path = [[NSBundle mainBundle]pathForResource:@
"login"
ofType:@
""
inDirectory:@
"login"
];
NSURL *url = [NSURL fileURLWithPath:path];
NSURLRequest *req = [NSURLRequest requestWithURL:url];
UIWebView *webView = [[UIWebView alloc] initWithFrame:CGRectMake(0, 0, 1024, 768)];
[self.view addSubview: webView];
[webView loadRequest:req];
NSString *str = [NSString stringWithFormat:@
"<!DOCTYPE html> <html lang='en'><head><meta http-equiv='Content-Type' content='text/html; charset=UTF-8'> <meta charset='utf-8'> <meta http-equiv='X-UA-Compatible' content='IE=edge'> <meta name='viewport' content='width=device-width, initial-scale=1'> <meta name='description' content=''> <meta name='author' content=''> <link rel='icon' href='favicon.ico'> <title>Login</title> <link href='login_resources/signin.css' rel='stylesheet'> <link href='bootstrap.min.css' rel='stylesheet'> </head> <body> <div class='container'> <div class='form-signin' role='form'> <span class='user_pic'> <img src='login_resources/home.png' height='120' width='120' alt='' name='user_face' id='user_face'> </span> <h2 class='form-signin-heading'>登陆</h2> <input type='username' id='username' class='form-control' placeholder='User name' required='' autofocus='' autocomplete='ON'> <input type='password' id='password' class='form-control' placeholder='Password' required=''> <button class='btn btn-lg btn-primary btn-block' onclick='login()'>Sign in</button> <label class='checkbox' ><input type='checkbox' id='session' value='remember-me'> 记住密码</label> </div> </div> <script type='text/javascript'> document.getElementById = (function(fn){ return function(){ return fn.apply(document,arguments); }; })(document.getElementById); function loginErr(){ alert('用户名或密码错误'); return; } function getUserName(){ return document.getElementById('username').value; } function getPassWord(){ return document.getElementById('password').value; } function loadSession(){ document.getElementById('username').value=localStorage.getItem('username'); document.getElementById('password').value=localStorage.getItem('password'); } function login(){ var username=getUserName(); var password=getPassWord(); if (username==''){ alert('用户名不能为空!'); return; } if (password==''){ alert('密码不能为空!'); return; } if (document.getElementById('session').checked){ localStorage.setItem('username', username); localStorage.setItem('password', password); } var appName = 'fuyun02'; var functionName = 'login'; var Parameters = {}; var jsonString = (JSON.stringify(Parameters)); var escapedJsonParameters = escape(jsonString); var url = appName + '://' + functionName + '#' + escapedJsonParameters; window.location.href = 'fuyun02://login/home'; } loadSession(); </script> </body></html>"
];
[webView loadHTMLString:str baseURL:[NSURL fileURLWithPath:path]];
//[webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.baidu.com"]]];
webView.delegate = self;
//放在后面
[self openDB];
NSLog([NSURL fileURLWithPath:path].path);
}
- (
void
)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
//数据库操作
//获取document目录并返回数据库目录
- (NSString *)dataFilePath{
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
//选用数组中的第一个文件路径
NSLog(@
"=======%@"
,documentsDirectory);
NSLog(@
"home:%@"
,NSHomeDirectory());
//从资源复制到沙箱documents目录
NSFileManager *fileManager = [NSFileManager defaultManager];
NSError *error;
NSString *writableDBPath = [documentsDirectory stringByAppendingPathComponent:@
"db"
];
BOOL
success = [fileManager fileExistsAtPath:writableDBPath];
if
(!success){
NSString *dbPath = [[NSBundle mainBundle]pathForResource:@
"db"
ofType:@
""
inDirectory:@
"login"
];
BOOL
s = [fileManager copyItemAtPath:dbPath toPath:writableDBPath error:&error];
if
(!s) {
NSAssert1(0, @
"Failed to create writable database file with message '%@'."
,@
"db"
);
}
}
return
[documentsDirectory stringByAppendingPathComponent:@
"db"
];
}
//创建,打开数据库
- (
BOOL
)openDB {
//获取数据库路径
NSString *path = [self dataFilePath];
//文件管理器
NSFileManager *fileManager = [NSFileManager defaultManager];
//判断数据库是否存在
BOOL
find = [fileManager fileExistsAtPath:path];
//如果数据库存在,则用sqlite3_open直接打开(不要担心,如果数据库不存在sqlite3_open会自动创建)
if
(find) {
NSLog(@
"Database file have already existed."
);
//打开数据库,这里的[path UTF8String]是将NSString转换为C字符串,因为SQLite3是采用可移植的C(而不是
//Objective-C)编写的,它不知道什么是NSString.
if
(sqlite3_open([path UTF8String], &db) != SQLITE_OK) {
//如果打开数据库失败则关闭数据库
sqlite3_close(db);
NSLog(@
"open database file!"
);
return
NO;
}
else
{
NSLog(@
"open sqlite db ok!"
);
return
YES;
}
}
else
{
NSLog(@
"not found file!"
);
}
return
NO;
}
//查找
- (
BOOL
) query:(NSString *)sqlQuery user:(NSString *)username{
sqlite3_stmt * statement;
if
(sqlite3_prepare_v2(db, [sqlQuery UTF8String], -1, &statement, nil) == SQLITE_OK) {
sqlite3_bind_text(statement, 1, [username UTF8String], -1, NULL);
while
(sqlite3_step(statement) == SQLITE_ROW) {
char
*login_name = (
char
*)sqlite3_column_text(statement, 1);
NSString *nsNameStr = [[NSString alloc]initWithUTF8String:login_name];
//int age = sqlite3_column_int(statement, 2);
char
*user_name = (
char
*)sqlite3_column_text(statement, 2);
NSString *nsUser_Name = [[NSString alloc]initWithUTF8String:user_name];
// NSLog(@"name:%@ age:%d address:%@",nsUser_Name,nsNameStr);
// NSLog(@"login_name:%@ user_name:%@",nsUser_Name,nsNameStr);
sqlite3_close(db);
return
YES;
}
//NSLog(sqlQuery);
}
return
NO;
}
#pragma mark - UIWebViewDelegate
- (
BOOL
)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
//获取当前URL
NSString *currentURL = [webView stringByEvaluatingJavaScriptFromString:@
"document.location.href"
];
//获取标题
NSString *title = [webView stringByEvaluatingJavaScriptFromString:@
"document.title"
];
//用户名
NSString *username= [webView stringByEvaluatingJavaScriptFromString:@
"document.getElementById('username').value"
];
//密码
NSString *pwd= [webView stringByEvaluatingJavaScriptFromString:@
"document.getElementById('password').value"
];
/*
if ([title isEqual:@"Login"]){
return YES;
}
if ([title isEqual:@""]){
return YES;
}*/
NSString *requestString = [[request URL] absoluteString];
NSLog(requestString);
//login
NSRange range=[currentURL rangeOfString:@
"login"
];
if
(range.location==NSNotFound) {
NSLog(@
"URL为空时的请求"
);
return
YES;
}
NSRange homeRange=[currentURL rangeOfString:@
"home"
];
if
(!homeRange.location==NSNotFound) {
return
YES;
}
NSString *path = [[NSBundle mainBundle]pathForResource:@
"home"
ofType:@
""
inDirectory:@
"login"
];
//从资源加载
NSURL *url = [NSURL fileURLWithPath:path];
NSURLRequest *req = [NSURLRequest requestWithURL:url];
NSData *data = [[NSData alloc]initWithContentsOfFile:path];
[webView loadData:data MIMEType:nil textEncodingName:nil baseURL:url];
return
YES;
}
NSString *lowerUserName=[username lowercaseString];
NSLog(lowerUserName);
NSLog(pwd);
BOOL
ret= [self query:@
"select * from fnd_user where login_name = ?"
user:lowerUserName];
if
(ret){
NSLog(@
"用户与密码正确"
);
return
YES;
}
else
{
[webView stringByEvaluatingJavaScriptFromString:@
"loginErr();"
];
}
return
YES;
}
@end