2013-06-19 20 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]; 

}