我想在 ASIHttprequest 库上显示下载进度条(HUD 进度条)。我试过这个[request setDownloadProgressDelegate:loadingHUD];
[request setShowAccurateProgress:YES];
[request setDelegate:self];
但运气不好,它在开始下载时显示空白,最后直接显示完整进度。所以我记录了进度值,我得到了set progress0.000000 set progress1.000000
。
如何获得 HUD 进度条的准确进度更新。
我将带有数据的 Json 发送到我的服务器和服务器验证它,如果它验证没问题,而不是发回我的视频数据作为响应..我想将该响应存储到视频文件中,所以我正在使用它
这是我的代码
loadingHUD = [MBProgressHUD showHUDAddedTo:self.view animated:YES];
loadingHUD.labelText = NSLocalizedString(@"Downloading", nil);
loadingHUD.mode=MBProgressHUDModeAnnularDeterminate;
[loadingHUD showWhileExecuting:@selector(verifyReceipt:) onTarget:self withObject:transaction animated:YES];
// call the verify receipt method and download the file
[[SKPaymentQueue defaultQueue] finishTransaction: transaction];
}
- (void)verifyReceipt:(SKPaymentTransaction *)transaction {
// string to NSdictionary and dictioanry to json string
NSArray *mainObjects = [NSArray arrayWithObjects:vendorId,deviceData,productID,nil]; // purchased Item ID of previous item
NSArray *mainKeys = [NSArray arrayWithObjects:@"ID",@"device",@"video",nil];
NSDictionary *mainDictionary = [NSDictionary dictionaryWithObjects:mainObjects forKeys:mainKeys]; // final string of data
NSLog(@"Json Main dict created");
NSString *sandBox=@"1";
NSArray *testobj = [NSArray arrayWithObjects:mainDictionary,receiptDataEncoded,sandBox,nil]; // purchased Item ID of previous item
NSArray *testkey = [NSArray arrayWithObjects:@"data",@"receiptData",@"sandbox",nil];
NSDictionary *testdict = [NSDictionary dictionaryWithObjects:testobj forKeys:testkey]; // final string of data
NSLog(@"Json Main dict created");
NSError *error;
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:testdict options:NSJSONWritingPrettyPrinted error:&error];
NSString *resultAsString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
NSLog(@"Purchase product Json string:\n%@", resultAsString);
ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:[[NSURL alloc] initWithString:@"http://testing.test.io/dev.php/video/verifyReceipt"]];
//[request setDidReceiveDataSelector:@selector(request:didReceiveBytes:)];
[request setPostValue:resultAsString forKey:@"verify"];
[request setDidFinishSelector:@selector(requestDone:)];
[request setTimeOutSeconds:120];
[request setNumberOfTimesToRetryOnTimeout:2];
// request.showAccurateProgress=YES;
[request setDownloadProgressDelegate:loadingHUD];
[request setShowAccurateProgress:YES];
request setDelegate:self];
//[request setDownloadProgressDelegate:self];
// SAVED video PATH
// Get the Document directory
NSString *documentDirectory = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
// Add your filename to the directory to create your saved pdf location
NSString *movLocation = [documentDirectory stringByAppendingPathComponent:[fileName st ringByAppendingString:@".mov"]];
// TEMPORARY video PATH
// Get the Caches directory
NSString *cachesDirectory = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject];
// Add your filename to the directory to create your temp pdf location
NSString *tempMovLocation = [cachesDirectory stringByAppendingPathComponent:[fileName stringByAppendingString:@".mov"]];
// Tell ASIHTTPRequest where to save things:
[request setTemporaryFileDownloadPath:tempMovLocation];
[request setDownloadDestinationPath:movLocation];
[request startSynchronous];
NSLog(@"Path is %@",movLocation);
}
- (void)setProgress:(float)progress1
{
[loadingHUD setProgress:progress1];
NSLog(@"set progress%f",progress1);
}
- (void)requestDone:(ASIHTTPRequest *)request{
//[MBProgressHUD hideHUDForView:self.view animated:YES];
if(request.responseStatusCode==200)
{
//BOOL success = [videoData writeToFile:movLocation atomically:NO];
// NSLog(@"bool value is%d",success);
NSLog(@"in request done sucsessfully downlaod and store in database %d",request.responseStatusCode);
[DBHelper savePurchaseId:fileName];
[self movieReceived];
}
else{
NSLog(@"in request downlaod and store in database failed %@",request.responseHeaders);
}
}
-(void)requestFailed:(ASIHTTPRequest *)request
{
NSLog(@"%@",request.error);
}
如果我使用 didreceivebytes 比我的文件不会被下载..
-(void)request:(ASIHTTPRequest *)request didReceiveBytes:(long long)bytes {
NSLog(@"Received bytes:%lld",bytes); progress = 0.0f; if (progress < 1.0f)
{
progress = ((float)bytes) / 469690;
NSLog(@"progress value is %f",progress);
loadingHUD.progress = progress;
}
}
感谢您提供任何帮助谢谢