IOS WEB APP学习

来源:互联网 发布:北京java培训费用 编辑:程序博客网 时间:2024/05/14 01:47

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;
     }
      if ([requestString hasSuffix:@"fuyun02://login/home"]) {
         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


 

0 0