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]

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

xmPP(即时通讯)向远程服务器请求数据

时间: 2024-08-10 12:01:10

xmPP(即时通讯)向远程服务器请求数据的相关文章

xmpp即时通讯协议的特性---长处和缺点!

xmpp协议的定义? XMPP是一种基于标准通用标记语言的子集XML的协议,它继承了在XML环境中灵活的发展性. 因此.基于XMPP的应用具有超强的可扩展性.经过扩展以后的XMPP能够通过发送扩展的信息来处理用户的需求.以及在XMPP的顶端建立如内容公布系统和基于地址的服务等应用程 序. 并且,XMPP包括了针对server端的软件协议,使之能与还有一个进行通话,这使得开发人员更easy建立客户应用程序或给一个配好系统加入功能. 在此我概括一下xmpp协议的优缺点: 长处: XMPP协议是自由.

Java服务器对外提供接口以及Android端向服务器请求数据

讲解下java服务器是如何对移动终端提供接口的,以什么数据格式提供出去,移动端又是怎么请求服务器,接收以及解析返回数据的. 服务端:还是在原先S2SH框架的项目上(搭建SSH详细步骤及其相关说明),加入Servlet来做对终端提供接口的事情. Android端:用了一个网络访问框架okHttp,向服务器请求数据. 服务端: servlet接收移动端的get.post请求,进行相应逻辑处理后将要返回的数据封装成json格式写出去. 对数据库的操作传统的Servlet是用jdbc,但是操作过于繁琐,

分享基于Android系统的XMPP即时通讯技术项目实战(仿微信开发架构,自定义控件)

即时通讯技术是 网络技术中的明珠.即时通讯产品改变了人们的生活习惯.经过十几年的发展,即时通讯功能的应用也逐渐从专门软件才能实现的功能逐渐成为标准配置.即时通讯技术的应用不仅仅只是用于社交领域,在大多的协同工作领域,以及需要分布结构的网络通讯领域都是非常重要的.讲师本人在android领域有多年的开发经验,在即时通讯系统方面也有深入的研究.在本课程中,详细讲解了android开发中要解决的一些主要的问题,即时通讯在客户端实现的过程,并手把手的进行操作,方便学习和理解.因为课时的原因,对于一些初级

XMPP即时通讯

XMPP:XMPP是基于XML的点对点通讯协议,The Extensible Messaging and Presence Protocol(可扩展通讯和表示协议). XMPP可用于服务类实时通讯,表示和需求响应服务中的XML数据元流失传输.XMPP以Jabber协议为基础,而Jabber是即时通讯中常用的开放式协议. 基本结构. XML是一个典型的C/S架构,而不是像大多数即时通讯软件一样,使用P2P客户端到客户端的架构,也就是说在大多数情况下,当两个客户端进行通讯时,他们的消息都是通过服务器

XMPP - 即时通讯技术

XMPP-即时通讯技术简介 (IM -- Instant Messaging)支持用户在线实时交谈.如果要发送一条信息,用户需要打开一个小窗口,以便让用户及其朋友在其中输入信息并让交谈双方都看到交谈的内容 有许多的IM系统,如AOL.Yahoo IM. MSN以及QQ,它们最大的区别在于各自通讯协议的实现,所以即时通讯技术的核心在于它的传输协议 协议用来说明信息在网络上如何传输,如果有了统一的传输协议,那么应当可以实现各个IM之间的直接通讯,为了创建即时通讯的统一标准,目前已经出现过的IM协议包

iOS开发之XMPP即时通讯简单实现

首先搭载服务器和数据库 搭载服务器我用的是openfire,数据库用的是mysql 这里推荐两个链接 配置mysql,用的是mysql workbench http://justsee.iteye.com/blog/1753467 配置服务器 openfire http://www.cnblogs.com/xiaodao/archive/2013/04/05/3000554.html 先配置好数据库然后配置服务器 两个都打开 下一个XMPP客户端,就是用来测试的 我下的是Adium 这里下 ht

xmpp即时通讯协议的特性---优点和缺点!

xmpp协议的定义? XMPP是一种基于标准通用标记语言的子集XML的协议,它继承了在XML环境中灵活的发展性.因此,基于XMPP的应用具有超强的可扩展性.经过扩展以后的XMPP可以通过发送扩展的信息来处理用户的需求,以及在XMPP的顶端建立如内容发布系统和基于地址的服务等应用程 序.而且,XMPP包含了针对服务器端的软件协议,使之能与另一个进行通话,这使得开发者更容易建立客户应用程序或给一个配好系统添加功能. 在此我概括一下xmpp协议的优缺点: 优点: XMPP协议是自由.开放.公开的,并且

React学习(4)——向服务器请求数据并显示

本文中涉及到的技术包括:node.js/express服务器的搭建.fetch发送数据请求. 在之前的几篇文章中,介绍了如何搭建基础的React项目,以及一些简单知识,现在,我们还需要掌握如何用React来向后台服务器发起HTTP请求,来获取数据.因为一个网站光有静态的页面是不够的,只能称其为静态网站,我们需要获取到数据才能让网页呈现更为丰富的内容. 现在的网站开发一般都采用前后端分离的开发方式.前端人员负责前端页面的实现,后端人员负责提供数据,前端页面将通过访问api接口的方式来链接后台,获取

XMPP即时通讯(代码实现)

1.配置XMPP(XMPPConfig.m) 2.配置XMPPFramework框架 3.创建单例类(XMPPManager.h/XMPPManager.m)管理器 XMPPManager.m: #import "XMPPManager.h" #import "AppDelegate.h" //连接服务器的目的 typedef NS_ENUM(NSInteger, ConnectToServerPopurpose) { ConnectToServerPopurpos