cocos2dx 之CCHttpRequest

来源:互联网 发布:哈弗福德文理学院 知乎 编辑:程序博客网 时间:2024/06/05 12:39

这里主要做的是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");


}

0 0