这里主要做的是cocos2dx里面的http联网类,主要是介绍get和post,我们主要是通过点击按钮来实现,话不多说,因为代码注释很详细,直接上代码:
init里面:
get方法:
CCLabelTTF *get= CCLabelTTF::create("Get", "Arial", 22);
CCMenuItemLabel *iget=CCMenuItemLabel::create(get,this,menu_selector(HelloWorld::getClicked));
iget->setPosition(ccp(240,200));
menuRequest->addChild(iget,1);
post方法:
CCLabelTTF *post= CCLabelTTF::create(" Post", "Arial", 22);
CCMenuItemLabel *ipost=CCMenuItemLabel::create(post,this,menu_selector(HelloWorld::postClicked));
ipost->setPosition(ccp(240,100));
menuRequest->addChild(ipost,1);
相应函数的实现:
void HelloWorld::getClicked(CCObject *sender)
{
//编译到Android平台之后注意添加联网权限
cocos2d::extension::CCHttpRequest* request = new cocos2d::extension::CCHttpRequest();//创建对象
request->setUrl("http://www.baidu.com");//设置请求地址
request->setRequestType(CCHttpRequest::kHttpGet);
/*请求的类型
kHttpGet,get请求
kHttpPost,post请求
kHttpUnkown 呵呵
*/
request->setResponseCallback(this, callfuncND_selector(HelloWorld::onGetFinished));//请求完的回调函数
request->setRequestData("HelloWorld",strlen("HelloWorld"));//请求的数据
request->setTag("geted baidu ");//tag
CCHttpClient::getInstance()->send(request);//发送请求
request->release();//释放内存,前面使用了new
}
void HelloWorld::postClicked(CCObject *sender)
{
CCHttpRequest* request = new CCHttpRequest();
request->setUrl("http://www.httpbin.org/post");
request->setRequestType(CCHttpRequest::kHttpPost);
request->setResponseCallback(this, callfuncND_selector(HelloWorld::onGetFinished));
// write the post data
const char* postData = "visitor=cocos2d&TestSuite=Extensions Test/NetworkTest";
request->setRequestData(postData, strlen(postData));
request->setTag("POST test1");
CCHttpClient::getInstance()->send(request);
request->release();
}
请求玩之后相应的回调函数
void HelloWorld::onGetFinished(CCNode *node,void *data)
{
CCHttpResponse *response = (CCHttpResponse*)data;
if (!response)
{
return;
}
int s=response->getHttpRequest()->getRequestType();
CCLog("request type %d",s);
if (0 != strlen(response->getHttpRequest()->getTag()))
{
CCLog("%s ------>oked", response->getHttpRequest()->getTag());
}
int statusCode = response->getResponseCode();
CCLog("response code: %d", statusCode);
char statusString[64] = {};
sprintf(statusString, "HTTP Status Code: %d, tag = %s", statusCode, response->getHttpRequest()->getTag());
CCLog(statusString);
if (!response->isSucceed())
{
CCLog("response failed");
CCLog("error buffer: %s", response->getErrorBuffer());
return;
}
std::vector<char> *buffer = response->getResponseData();
printf("Http Test, dump data: ");
for (unsigned int i = 0; i < buffer->size(); i++)
{
CCLog("%c", (*buffer)[i]);//这里打印从服务器返回的数据
}
printf("\n");
}