lowcosthighperformance
lowcosthighperformance

Reputation: 151

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. But in the second textfield it doesnt write any thing. it prints null on console. 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;
}

Upvotes: 4

Views: 848

Answers (1)

Manann Sseth
Manann Sseth

Reputation: 2745

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.

Upvotes: 1

Related Questions