简体   繁体   English

iphone web服务应用程序

[英]iphone web service application

Hi I am writing iphone application that communicates web service, So I have two textfield, program need to read the value of first textfield and post the web service then after the response from web service it need to write second text field. 您好我正在编写iphone应用程序来传达Web服务,所以我有两个文本域,程序需要读取第一个文本字段的值并发布Web服务然后在Web服务响应之后需要编写第二个文本字段。 But in the second textfield it doesnt write any thing. 但是在第二个文本字段中它并没有写任何东西。 it prints null on console. 它在控制台上打印null。 Why it becomes? 为什么会这样? Thanks. 谢谢。

 - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
    {
        self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
        if (self) {
            nodeContent = [[NSMutableString alloc]init];
        }
        return self;
    }

- (IBAction)login:(id)sender {

    NSLog(@"PASSWORD text: %@",password.text);

    if ([password.text length]==0) {

        UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"WebService" message:@"Supply Data in text field" delegate:nil cancelButtonTitle:nil otherButtonTitles:@"ok",nil];
        [alert show];
        [alert release];
    }
    else {

        NSString *soapFormat = [NSString stringWithFormat:@"<?xml version=\"1.0\" encoding=\"utf-8\"?>\n"
                                "<soap:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">\n"
                                "<soap:Body>\n"
                                "<CelsiusToFahrenheit xmlns=\"http://tempuri.org/\">\n"
                                "<Celsius>%@</Celsius>\n"
                                "</CelsiusToFahrenheit>\n"
                                "</soap:Body>\n"
                                "</soap:Envelope>\n",password.text];


        NSLog(@"The request format is %@",soapFormat);

        NSURL *locationOfWebService = [NSURL URLWithString:@"http://www.w3schools.com/webservices/tempconvert.asmx"];

        NSLog(@"web url = %@",locationOfWebService);

        NSMutableURLRequest *theRequest = [[NSMutableURLRequest alloc]initWithURL:locationOfWebService];

        NSString *msgLength = [NSString stringWithFormat:@"%d",[soapFormat length]];

        [theRequest addValue:@"text/xml" forHTTPHeaderField:@"Content-Type"];
        [theRequest addValue:@"http://tempuri.org/CelsiusToFahrenheit" forHTTPHeaderField:@"SOAPAction"];
        [theRequest addValue:msgLength forHTTPHeaderField:@"Content-Length"];
        [theRequest setHTTPMethod:@"POST"];
        //the below encoding is used to send data over the net
        [theRequest setHTTPBody:[soapFormat dataUsingEncoding:NSUTF8StringEncoding]];


        NSURLConnection *connect = [[NSURLConnection alloc]initWithRequest:theRequest delegate:self];

        if (connect) {
            webData = [[NSMutableData alloc]init];
            startActivityIndicator;
        }
        else {
            NSLog(@"No Connection established");
        }


      //  [self performSegueWithIdentifier:@"logindevam" sender:self];

    }

}
- (IBAction)sendkeyboard:(id)sender {
    [sender resignFirstResponder];
}

-(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
{
    [webData setLength: 0];
}
-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
    [webData appendData:data];
}
-(void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
{
    NSLog(@"ERROR with theConenction");
    [connection release];
    [webData release];
}
-(void)connectionDidFinishLoading:(NSURLConnection *)connection
{
    NSLog(@"DONE. Received Bytes: %d", [webData length]);
    NSString *theXML = [[NSString alloc] initWithBytes: [webData mutableBytes] length:[webData length] encoding:NSUTF8StringEncoding];
    NSLog(@"%@",theXML);

    xmlParser = [[NSXMLParser alloc]initWithData:webData];
    [xmlParser setDelegate: self];
    //[xmlParser setShouldResolveExternalEntities: YES];
    [xmlParser parse];
    //  
    [connection release];
    //[webData release];
    //[resultTable reloadData];
    stopActivityIndicator;
}


//xml delegates

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qualifiedName attributes:(NSDictionary *)attributeDict
{

}

- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
{
    [nodeContent appendString:[string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]];
}

- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
{
    if ([elementName isEqualToString:@"CelsiusToFahrenheitResult"]) {
        NSLog(@"nodeContent: %@",nodeContent);   // it becomes null
        finaldata = nodeContent;
        NSLog(@"finaldata: %@",finaldata);          // it becomes null
        NSLog(@"username.text: %@",username.text);  // it becomes null
        username.text = finaldata; 

    }
    username.text = finaldata;
}

Code:: 码::

-(void)connectionDidFinishLoading:(NSURLConnection *)connection {

   NSLog(@"DONE. Received Bytes: %d", [webData length]);
   NSString *theXML = [[NSString alloc] initWithBytes: [webData mutableBytes] length:[webData length] encoding:NSUTF8StringEncoding];
NSLog(@"%@",theXML);

   theXML = [theXML stringByReplacingOccurrencesOfString:@"&lt;" withString:@"<"];
   theXML = [theXML stringByReplacingOccurrencesOfString:@"&gt;" withString:@">"];
   theXML = [theXML stringByReplacingOccurrencesOfString:@"&amp;" withString:@"&"];

   NSString *str, *result;
   result = [[[NSString alloc] initWithFormat:@""] autorelease];

   NSArray *array=[theXML componentsSeparatedByString:@"<CelsiusToFahrenheitResult>"];
   for(int i=1;i<[array count];i++)
   {
      str=[array objectAtIndex:i];

      NSRange ranfrom=[str rangeOfString:@"</CelsiusToFahrenheitResult>"];
      result =[str substringToIndex:ranfrom.location];
   }

   NSLog(@"\n -> %@", result);

   t2.text = result; // Your Second textfield

   [connection release];
}

It'll definately work. 它肯定会起作用。 Thanks. 谢谢。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM