zoukankan      html  css  js  c++  java
  • xmPP(即时通讯)向远程服务器请求数据

    首先在本地初始化一个数据库

    - (void)initDatabase

    {

        //最终数据库路径

        NSString *dbPath  = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents/database.db"];

        

        NSFileManager *fm = [NSFileManager defaultManager];

        if(![fm fileExistsAtPath:dbPath])

        {

            EGODatabase* database = [EGODatabase databaseWithPath:dbPath];

    strSql = @"creat table if not exists notice(id integer primary key asc,noticeid text,title text, image text,content text,timestamp text);";

            [database executeQuery:strSql];

            [database close];

     }

    然后保存信息在本地数据库,因为我做的时资讯,所以有一个判断,如果本地已经有这个资讯则直接返回,如果有更新资讯就插入最新的资讯

    -(void)saveNotice:(NoticeMessage *)notice

    {

        NSString *dbPath  = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents/database.db"];

        EGODatabase* database = [EGODatabase databaseWithPath:dbPath];

        //查询是否已经存在,如果存在就直接返回不插入

        NSString *sqlQuery = [[NSString alloc]initWithFormat:@"select count(*) from notice where noticeid = %@",notice.strnotId];

        //NSLog(@"%@",sqlQuery);

        EGODatabaseResult *result = [database executeQuery:sqlQuery];

        for(EGODatabaseRow* row in result) {

            NSString* strTotal = [row stringForColumnAtIndex:0];

            if ([strTotal integerValue] > 0) {

                return;

            }

        }

            NSString* sqlInsert = [[NSString alloc] initWithFormat:@"insert into notice(noticeid,title,date,image,content,timestamp) values('%@','%@','%@','%@','%@','%@')",notice.strNoticeId,notice.strTitle,notice.strDate,notice.strImage,notice.strContent,notice.strTimeStamp];

        [database executeQuery:sqlInsert];

        NSLog(@"save message:%@",sqlInsert);

        [database close];

    }

     我们在与服务器端同事沟通时做了一个资讯的id,通过ID判断是否最新资讯,所以会查询一下本地数据库里的id,那么我就抽出了这个数据库方法,将这个id赋给一个全局变量,

    在把这个全局变量赋给后面的请求。

    //检查本地公告id

    -(void)searchNoticeDataBase

    {

        EGODatabase* database = [EGODatabase databaseWithPath:[NSHomeDirectory() stringByAppendingPathComponent:@"Documents/database.db"]];

        //查询是否已经存在最新公告

        NSString *sqlQuery = [[NSString alloc]initWithFormat:@"select noticeid from notice group by category order by noticeid limit 1"];

        //NSLog(@"%@",sqlQuery);

        EGODatabaseResult *result = [database executeQuery:sqlQuery];

        for(EGODatabaseRow* row in result)

            {

            NoticeMessage *msg = [[NoticeMessage alloc]init];

            

            msg.strnotId = [row stringForColumn:@"noticeid"];

                noticeId = msg.strnotId;

              }

        [database close];

    }

    请求的方法

    -(void)checkNewNotice

    {

        NSUserDefaults *pref = [NSUserDefaults standardUserDefaults];

        NSString* strToken = [pref stringForKey:@"logintoken"];

        NSString *oldNoticeId = noticeId;

        if (oldNoticeId == nil) {

            oldNoticeId = @"0";

        }

        //向管理平台登录,获取token

        NSString *strUrl = [NSString stringWithFormat:@"http://xxx.xx.x.xxx:xxxx/fxxxxxxxx?xxxx=%@&xxxx=%@",strToken,oldNoticeId];

        NSLog(@"Chect new info %@",strUrl);

        NSURL *url = [NSURL URLWithString:strUrl];

        __block ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];

        [request setCompletionBlock:^{

            // Use when fetching text data

            NSString *responseString = [request responseString];

            NSLog(@"login result:%@",responseString);

            

            NSError *error = nil;

            NSData *jsonData = [responseString dataUsingEncoding:NSUTF8StringEncoding];

            NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:jsonData options:kNilOptions error:&error];

            NSString* msgCode = [dict objectForKey:@"code"];

            if ([msgCode isEqualToString:@"200"]) {

                NSLog(@"get new info success!");

            

                NSDictionary *noticeDict = [dict objectForKey:@"result"];

                for (NSDictionary* dResult in noticeDict) {

                    NSString *strNoticeId = [dResult objectForKey:@"noticeid"];

                    NSString *strTitle = [dResult objectForKey:@"title"];

                    NSString *strDate = [dResult objectForKey:@"date"];

                    NSString *strImage = [dResult objectForKey:@"image"];

                    NSString *strContent = [dResult objectForKey:@"content"];

                    NSString *strTimeStamp = [dResult objectForKey:@"timestamp"];

                    

                    

                    NoticeMessage *notice = [[NoticeMessage alloc]init];

                    notice.strNoticeId = strNoticeId;

                    notice.strTitle = strTitle;

                    notice.strDate = strDate;

                    notice.strImage = strImage;

                    notice.strContent = strContent;

                    notice.strTimeStamp = strTimeStamp;

                   

                    [self saveNotice:notice];

                }

                

                //重新加载资讯信息

                [self loadNotice];

                [self.tableValued reloadData];

                

                //   [SVProgressHUD dismiss];

            }

            else if([msgCode isEqualToString:@"404"]) {

                NSLog(@"找不到用户");

                //  [SVProgressHUD showErrorWithStatus:@"用户名或密码有误"];

                return;

            }

            else{

                ;// [SVProgressHUD dismiss];

            }

            NSLog(@"msgCode is %@",msgCode);

            // Use when fetching binary data

            //NSData *responseData = [request responseData];

        }];

        [request setFailedBlock:^{

            NSError *error = [request error];

            NSLog(@"login result:%@",error.description);

        }];

        [request startAsynchronous];

    }

    还需要一个从数据库载入的方法

    - (void)loadNotice

    {

        if (!arrayNotice) {

            arrayNotice = [[NSMutableArray alloc]init];

        }

        

        EGODatabase* database = [EGODatabase databaseWithPath:[NSHomeDirectory() stringByAppendingPathComponent:@"Documents/database.db"]];

        

        //查询所有的公告

        NSString *sqlQuery = [[NSString alloc]initWithFormat:@"select distinct * from notice  order by timestamp"];

        //NSLog(@"%@",sqlQuery);

        

        EGODatabaseResult *result = [database executeQuery:sqlQuery];

        for(EGODatabaseRow* row in result) {

            NoticeMessage *msg = [[NoticeMessage alloc]init];

            

            msg.strNoticeId = [row stringForColumn:@"noticeid"];

            msg.strTitle = [row stringForColumn:@"title"];

            msg.strContent = [row stringForColumn:@"content"];

            msg.strTimeStamp = [row stringForColumn:@"timestamp"];

            

            [arrayNotice insertObject:msg atIndex:0];

        }

        [database close];

    }

    那么最后,我是在登录的时候调用请求的方法

    [self checkNewNotice]

    说实话我还是个小菜鸟,这个项目真的帮助我提升了许多,虽然很多还是不懂,但我都觉得我已经是高富帅了

  • 相关阅读:
    真正的Java学习从入门到精通
    Java学习从入门到精通(1) [转载]
    Java Learning Path(三)过程篇
    Java Learning Path(五)资源篇
    Java Learning Path(四) 方法篇
    浅析Java语言中两种异常的差别
    JDK,JRE,JVM区别与联系
    JAVA敏捷开发环境搭建
    谈谈WEB开发中的苦大难字符集问题
    java读取clob字段的几种方法
  • 原文地址:https://www.cnblogs.com/tuhaoYY/p/3850894.html
Copyright © 2011-2022 走看看