我想在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;
}
}
任何帮助表示赞赏谢谢
答案 0 :(得分:0)
我通过使用afnetworking来解决 并删除getparameter编码并在字典中添加post值
NSString *documentDirectory = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
// Add your filename to the directory to create your saved pdf location
NSString* destPath = [documentDirectory stringByAppendingPathComponent:[fileName stringByAppendingString:@".mov"]];
NSURL *url = [NSURL URLWithString:@"http:/testing.io"]; //
AFHTTPClient *httpClient = [[AFHTTPClient alloc] initWithBaseURL:url];
// [httpClient setParameterEncoding:AFJSONParameterEncoding];// no need of this line remove
NSMutableURLRequest *request = [httpClient requestWithMethod:@"POST" path:@"dev.php/video/verifyReceipt" parameters:postRequest]; // /dev.php/video/verifyReceipt
NSLog(@"postRequest: %@", postRequest);
AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request];
operation.outputStream = [NSOutputStream outputStreamToFileAtPath:destPath append:NO];
[operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject)
{
// Give alert that downloading successful.
NSLog(@"Successfully downloaded file to %@", destPath);
// [self.target parserDidDownloadItem:destPath];
HUD.detailsLabelText = [NSString stringWithFormat:@"%@ %i%%",@"Downloading",100];
[HUD hide:TRUE];
[DBHelper savePurchaseId:fileName];
[self movieReceived];
}
failure:^(AFHTTPRequestOperation *operation, NSError *error)
{
// Give alert that downloading failed
NSLog(@"Error: %@", error);
// [self.target parserDidFailToDownloadItem:error];
[HUD hide:TRUE];
}];
[operation setDownloadProgressBlock:^(NSUInteger bytesWritten, long long totalBytesWritten, long long totalBytesExpectedToWrite)
{
// Progress
float totalProgress = (totalBytesWritten / (totalBytesExpectedToWrite * 1.0f) * 100);
HUD.detailsLabelText = [NSString stringWithFormat:@"Downloading %i%%", MIN((int)(totalProgress), 99)];
}];
[operation start];
}