2013-06-19 22 views
0

我想在ASIHttprequest库上显示下载进度条(HUD进度条)。 我试过这[request setDownloadProgressDelegate:loadingHUD]; [request setShowAccurateProgress:YES]; [request setDelegate:self]; 但没有运气,它显示空白在开始downlaod和结束直接显示完整进度。 所以我记录进度值,并得到set progress0.000000 set progress1.000000set-progress仅给asi-http-request中的0和1值自定义进度跟踪

我怎样才能获得准确的进度更新到我的HUD进度条。

我JSON发送数据到我的服务器和服务器验证和,如果它的验证还好不是在response..i发回我的视频数据要存储响应转换成视频文件,所以我用这个

这里是我的代码

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 *[email protected]"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

你以前张贴类似的问题,我已经回答了这个问题。你尝试过吗? – Adithya

+0

@Adithya我的问题没有解决这就是为什么 –

+0

你有没有得到我提供的解决方案? – Adithya

回答

0

我解决了在使用afnetworking 和reloving setparameterencoding和增加岗位价值dictioanry

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]; 

}