在json解析中使用活动指示符

时间:2016-05-27 06:51:57

标签: ios objective-c json activity-indicator

我正在处理应用程序,我必须在登录进行时使用activityindicator,我没有得到我必须在下面的代码中使用activityindicator的代码: -

- (IBAction)Login:(id)sender
{
    NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration];
    NSURLSession *session = [NSURLSession sessionWithConfiguration:configuration delegate:self delegateQueue:nil];

    NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:BaseUrl@"login"]];

    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url
                                                           cachePolicy:NSURLRequestUseProtocolCachePolicy
                                                       timeoutInterval:60.0];

    [request addValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];


    [request addValue:@"*/*" forHTTPHeaderField:@"Accept"];

    [request setHTTPMethod:@"POST"];

    NSString *mapData = [NSString stringWithFormat:@"userName=g&userPassword=123456&api_key=ZWZ&api_password=1" ];

    NSData *postData = [mapData dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES];

    [request setHTTPBody:postData];


    NSURLSessionDataTask *postDataTask = [session dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {

        if(error == nil)
        {

            NSString * text = [[NSString alloc] initWithData: data encoding: NSUTF8StringEncoding];
            NSLog(@"text= %@",text);

            NSError *error = nil;
            NSDictionary *json = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&error];

            if(error!=nil)
            {
                NSLog(@"error = %@",error);

            }

            dispatch_async(dispatch_get_main_queue(), ^{
                [self checkUserSuccessfulLogin:json];
            });
        }
        else{

            NSLog(@"Error : %@",error.description);

        }


    }];


    [postDataTask resume];




}

登录后转到其他页面需要时间。 请帮帮我。

5 个答案:

答案 0 :(得分:1)

使用以下代码

//main thread
UIActivityIndicatorView *spinner = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
spinner.center = CGPointMake([[UIScreen mainScreen]bounds].size.width/2, [[UIScreen mainScreen]bounds].size.height/2);

//if you want to add to window, use this below one
[appdelegate.window addSubview:spinner];

//or if you want to add to view, use below one
 [self.view addSubView:spinner];

[spinner startAnimating];


dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW, 0),^{

    dispatch_async(dispatch_get_main_queue(), ^{

   //after your server call or parsing or something you can call this to stop animating 

   [spinner stopAnimating];
  });
  });

答案 1 :(得分:0)

aakash,

你可以使用MBProgressHUD第三方框架你不需要编写活动的代码inddicator将它添加到屏幕和所有(不需要重新发明轮子)这里是一个链接:) https://github.com/jdg/MBProgressHUD

添加pod依赖项或将文件添加到项目中,但感觉很舒服。

导入文件。

 Selection.Tables(1).Rows.LeftIndent = <Value_as_that_of_the_text_above>

答案 2 :(得分:0)

我更新了活动指标的代码。

只需在.h文件中输入活动指示符。

@property (weak,nonatomic) UIActivityIndicatorView *indicator;

然后,在.m文件的viewDidLoad()中写下代码。

self.indicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
self.indicator.center = CGPointMake([[UIScreen mainScreen]bounds].size.width/2, [[UIScreen mainScreen]bounds].size.height/2);

以下是Json解析的代码:

- (IBAction)Login:(id)sender
{

    [self.indicator startAnimating];//The ActivityIndicator Starts Animating Here

    NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration];
    NSURLSession *session = [NSURLSession sessionWithConfiguration:configuration delegate:self delegateQueue:nil];

    NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:BaseUrl@"login"]];

    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url
                                                       cachePolicy:NSURLRequestUseProtocolCachePolicy
                                                   timeoutInterval:60.0];

    [request addValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];


    [request addValue:@"*/*" forHTTPHeaderField:@"Accept"];

    [request setHTTPMethod:@"POST"];

    NSString *mapData = [NSString stringWithFormat:@"userName=g&userPassword=123456&api_key=ZWZ&api_password=1" ];

    NSData *postData = [mapData dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES];

    [request setHTTPBody:postData];


    NSURLSessionDataTask *postDataTask = [session dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {

    if(error == nil)
    {
        dispatch_async(dispatch_get_main_queue(), ^{

             [self.indicator stopAnimating];//The ActivityIndicator Stops Animating when Response Arrives

             NSString * text = [[NSString alloc] initWithData: data encoding: NSUTF8StringEncoding];
             NSLog(@"text= %@",text);

             NSError *error = nil;
             NSDictionary *json = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&error];

             [self checkUserSuccessfulLogin:json];
        });
    }
    else
    {
        dispatch_async(dispatch_get_main_queue(), ^{

             [self.indicator stopAnimating];
        });
        NSLog(@"Error : %@",error.description);
    }
 }];

 [postDataTask resume];

}

答案 3 :(得分:0)

试用此代码

-(IBAction)Login:(id)sender
{

    UIActivityIndicatorView *activityView = [[UIActivityIndicatorView alloc]initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
    CGRect activityFrame = CGRectMake(130,10,40,40);
    [activityView setFrame: activityFrame];
    dispatch_async(dispatch_get_main_queue(), ^{
        [self.view addSubview:activityView];
        activityView.center = self.view.center;
        [activityView startAnimating];
        [self.view bringSubviewToFront:activityView];

    });

    NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration];
    NSURLSession *session = [NSURLSession sessionWithConfiguration:configuration delegate:self delegateQueue:nil];

    NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:BaseUrl@"login"]];

    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url
                                                           cachePolicy:NSURLRequestUseProtocolCachePolicy
                                                       timeoutInterval:60.0];

    [request addValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];


    [request addValue:@"*/*" forHTTPHeaderField:@"Accept"];

    [request setHTTPMethod:@"POST"];

    NSString *mapData = [NSString stringWithFormat:@"userName=g&userPassword=123456&api_key=ZWZ&api_password=1" ];

    NSData *postData = [mapData dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES];

    [request setHTTPBody:postData];


    NSURLSessionDataTask *postDataTask = [session dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {

        if(error == nil)
        {

            NSString * text = [[NSString alloc] initWithData: data encoding: NSUTF8StringEncoding];
            NSLog(@"text= %@",text);

            NSError *error = nil;
            NSDictionary *json = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&error];

            if(error!=nil)
            {
                NSLog(@"error = %@",error);

            }

            dispatch_async(dispatch_get_main_queue(), ^{
                [activityView stopAnimating];
             [activityView removeFromSuperview];
                [self checkUserSuccessfulLogin:json];
            });
        }
        else{

            NSLog(@"Error : %@",error.description);

        }


    }];


    [postDataTask resume];




}

答案 4 :(得分:0)

 - (IBAction)Login:(id)sender

 {
//show or add youar activity indicator here


NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration];
NSURLSession *session = [NSURLSession sessionWithConfiguration:configuration delegate:self delegateQueue:nil];

NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:BaseUrl@"login"]];

NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url
                                                       cachePolicy:NSURLRequestUseProtocolCachePolicy
                                                   timeoutInterval:60.0];

[request addValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];


[request addValue:@"*/*" forHTTPHeaderField:@"Accept"];

[request setHTTPMethod:@"POST"];

NSString *mapData = [NSString stringWithFormat:@"userName=g&userPassword=123456&api_key=ZWZ&api_password=1" ];

NSData *postData = [mapData dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES];

[request setHTTPBody:postData];


NSURLSessionDataTask *postDataTask = [session dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {

    //Hide or remove your activity indicator here


    if(error == nil)
    {

        NSString * text = [[NSString alloc] initWithData: data encoding: NSUTF8StringEncoding];
        NSLog(@"text= %@",text);

        NSError *error = nil;
        NSDictionary *json = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&error];

        if(error!=nil)
        {
            NSLog(@"error = %@",error);

        }

        dispatch_async(dispatch_get_main_queue(), ^{
            [self checkUserSuccessfulLogin:json];
        });
    }
    else{

        NSLog(@"Error : %@",error.description);

    }


}];


[postDataTask resume];




}

当我在你的代码中添加注释时,在方法的最开始时显示你的活动指示器作为用户点击按钮它启动并将其从完成处理程序中隐藏,因为完成处理程序在响应来自服务器之后调用。

希望这会有所帮助:)