【问题标题】:Run Two urls in single method以单一方法运行两个 url
【发布时间】:2014-08-18 02:24:40
【问题描述】:

我正在寻找一种方法来运行 2 个服务,一个接一个地发布图像。在第一个服务之后我需要得到响应然后我需要将该响应传递给第二个服务。

我用来发布运行单个服务以发布单个图像的代码是

NSString *url=[NSString stringWithFormat:@"http://37.187.152.236/UserImage.svc/InsertObjectImage?%@",requestString];
NSLog(@"url1%@",url);
 NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init] ;
[request setURL:[NSURL URLWithString:url]];
[request setHTTPMethod:@"POST"];

// Create 'POST' MutableRequest with Data and Other Image Attachment.

NSString *boundary = @"---------------------------14737809831466499882746641449";
NSString *contentType = [NSString stringWithFormat:@"multipart/form-data; boundary=%@", boundary];
[request setValue:contentType forHTTPHeaderField:@"Content-Type"];
NSData *data = UIImageJPEGRepresentation(chosenImage1, 0.2f);
[request addValue:@"image/JPEG" forHTTPHeaderField:@"Content-Type"];
NSMutableData *body = [NSMutableData data];
[body appendData:[NSData dataWithData:data]];
[request setHTTPBody:body];

stackoverflow 中可能有一些类似的问题,但我的需求完全不同。

方法的流程必须是这样的 *运行第一个 url --> 生成响应 ({userid:"20",message:"success"} ) --> 运行第二个 url *

帮帮我,提前谢谢大家。

【问题讨论】:

  • 你可以使用两种方式,一种是同步的,另一种是异步的。无论何时你从第一个 url 获得所需的输出,你都可以将请求发送到第二个 url..
  • 感谢您的回复@Alfa。你能改善你的答案吗?我是 ios 新手

标签: ios objective-c image url


【解决方案1】:

你可以根据第一种方法的响应调用第二种方法

-(void)webservicecall {
    WebApiController *obj=[[WebApiController alloc]init];

    NSMutableDictionary *imageparameter = [NSMutableDictionary dictionary];

    NSData *imagedata = UIImagePNGRepresentation(self.productImageView.image);

    [imageparameter setValue:imagedata forKey:@"image"];

    [obj callAPIWithImage:@"upload.php" WithImageParameter:imageparameter WithoutImageParameter:nil SuccessCallback:@selector(upload_response:Response:) andDelegate:self];

}

来自网络服务的响应:

-(void)upload_response:(NSString *)apiAlias Response:(NSData *)response {

    NSMutableDictionary *jsonDictionary=[NSJSONSerialization JSONObjectWithData:response options:NSJSONReadingMutableContainers error:nil];

    NSString *responseMsg=[[NSString alloc] initWithString:[jsonDictionary objectForKey:@"message"]];

    if ([responseCode isEqualToString:@"success"]) {
        [self CallToSecondWebService];

    }

}

第二个网络服务:

-(void)CallToSecondWebService
{

}

【讨论】:

    【解决方案2】:
    【解决方案3】:

    也许这会对你有所帮助。

     -(void)getData:(NSString *)userid
    {
        /*--- Your Current code here ---*/
        /*--- this is synchronous request you can use asynchronous as well ---*/
        NSURLResponse *response = nil;
        NSData *dataResponse = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:nil];
    
        /*--- Save your response if you want ---*/
        id Obj = [NSJSONSerialization JSONObjectWithData:dataResponse options:NSJSONReadingMutableLeaves error:nil];
        if ([Obj isKindOfClass:[NSArray class]])
        {
        /*--- here you get response ---*/
        /*--- I've created sample method that you can pass userid in same method ---*/
        /*--- Call same method or create new method and do same thing ---*/
    
        [self getData:[[Obj objectAtIndex:0] valueForKey:@"userid"]];
        }
    }
    

    【讨论】:

    • 我需要在方法中获取响应消息。我在哪里编写代码来运行 url。
    • 是的,您可以通过Obj 获得回复。 NSLog obj 你会得到响应。
    • getData 出现错误 .. 我应该在这里放置什么而不是 getData
    • 再次调用你的方法。这是示例方法。
    • @iOSDeveloper 你找到我了吗?
    【解决方案4】:

    我强烈反对你使用同步连接,它们会阻塞线程直到完成,如果这个线程是主线程,它们会阻塞用户交互。此外,您将无法控制已发送的块或身份验证挑战。
    在您的情况下,最好的方法是使用诸如AFNetworking 2 之类的网络管理器并创建不同的网络操作,然后您可以在它们之间添加依赖关系(如果您愿意,可以将它们链接起来)。 另一种方式是 dispatch_group。您可以将操作(或会话)添加到组并等待它们结束。
    [更新]
    在 AFnetworking 2.0

    NSDictionary * parameter = @{ParameterImage  : mainImage ? @"1" : @"0",};
    NSError * __autoreleasing * constructingError = nil;   
    AFHTTPRequestOperation * op1 = [self POST:ApiImageUploadURL parameters:parameter constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {
            [formData appendPartWithFileURL:[NSURL fileURLWithPath:imagePath] name: ParameterImageData error:constructingError];
        } success:^(AFHTTPRequestOperation *operation, id responseObject) {
            NSError * error = nil;
            id objects = [NSJSONSerialization JSONObjectWithData:responseObject options:0 error:&error];
            DLog(@"Response %@", objects);
            NSString * imageID = [objects[@"id"] stringValue];
        } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
            DLog(@"Error%@", error);
        }];
    // create operation op2
    [op2 addDependecy:op1];
    

    【讨论】:

    • 我可以使用 afnetworking @andrea 进行上述流程
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-29
    相关资源
    最近更新 更多