cpp
调用
// 这是个静态方法,得到一个httpClient实例
HttpClient* httpClient = HttpClient::getInstance();
// 创建一个CCHttpRequest对象
HttpRequest* httpReq = new HttpRequest();
// 设置请求类型
httpReq->setRequestType(HttpRequest::Type::GET);
// 设置请求Url(可以更具需要从json 或xml,甚至html里解析获得到这个图片url)
httpReq->setUrl("http://avatar.csdn.net/A/6/5/1_qqxj2012.jpg");
// 请求完成后回调
httpReq->setResponseCallback(CC_CALLBACK_2(HelloLayer::LoadFinish, this));
// 为请求设置标签,后面可以根据这个标签来获取我们要的数据
httpReq->setTag("PicGet");
// 设置连接超时时间
httpClient->setTimeoutForConnect(30);
httpClient->send(httpReq);
httpReq->release();
httpReq = NULL;
void HelloLayer::LoadFinish(HttpClient *sender, HttpResponse *response)
{
// 判断是否响应成功
if (!response->isSucceed())
{
return;
}
const char* tag = response->getHttpRequest()->getTag();
if (0 == strcmp("PicGet", tag))
{
std::vector<char> *data = response->getResponseData();
int data_length = data->size();
std::string res;
for (int i = 0; i<data_length; ++i)
{
res += (*data)[i];
}
res += '\0';
}
// 数据转存
unsigned char* pBuffer = NULL;
ssize_t bufferSize = 0;
std::vector<char> *buffer = response->getResponseData();
std::string path = CCFileUtils::sharedFileUtils()->getWritablePath() + "test.png";
pBuffer = CCFileUtils::sharedFileUtils()->getFileData(path.c_str(), "r", &bufferSize);
std::string buff(buffer->begin(), buffer->end());
Image* image = new Image;
image->initWithImageData((unsigned char*)buffer->data(), buffer->size());
Texture2D* texture = new Texture2D();
bool isImage = texture->initWithImage(image);
image->release();
CCSprite* temp = Sprite::createWithTexture(texture);
temp->setPosition(VisableSize.x / 2, VisableSize.y / 2);
addChild(temp);
//保存到本地文件
CCLOG("path: %s", path.c_str());
FILE *fp = fopen(path.c_str(), "wb+");
fwrite(buff.c_str(), 1, buffer->size(), fp);
fclose(fp);
}