IOS WEB APP学习

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


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值