0

私のクライアントには、私の登録用に 1 つの Web サービスが与えられています。値を投稿する必要があります。次のコードを使用して投稿しています。

-(IBAction)testingPurpose:(id)sender{

    NSMutableDictionary *finalQuoteDict = [[NSMutableDictionary  alloc] init];
    [finalQuoteDict setValue:@"It is an Error Message" forKey:@"ErrorMsg"];
    [finalQuoteDict setValue:@"json" forKey:@"ReturnVal"];
    [finalQuoteDict setValue:@"john@live.com" forKey:@"Email"];
    [finalQuoteDict setValue:@"David John" forKey:@"FullName"];
    [finalQuoteDict setValue:@"2147483647" forKey:@"UserID"];
    [finalQuoteDict setValue:@"john" forKey:@"UserName"];
    [finalQuoteDict setValue:@"qqqqqq" forKey:@"UserPassword"];
    SBJsonWriter *jsonWriter = [[SBJsonWriter alloc] init];    
    NSString *jsonRequest = [jsonWriter stringWithObject:finalQuoteDict];  
    jsonRequest = [jsonRequest stringByReplacingOccurrencesOfString:@"<" withString:@""];
    NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"%@Register",MainUrl1,jsonRequest]];
    NSLog(@"url is---%@",url);
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url
                                                           cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:60.0];

    NSData *requestData = [NSData dataWithBytes:[jsonRequest UTF8String] length:[jsonRequest length]];

    [request setHTTPMethod:@"POST"];

       [request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
    [request setValue:[NSString stringWithFormat:@"%d", [requestData length]] forHTTPHeaderField:@"Content-Length"];
    [request setHTTPBody: requestData];

    NSError* error = nil;
    NSURLResponse* response;
    NSData* result = [NSURLConnection sendSynchronousRequest:request  returningResponse:&response error:&error];

    NSString *dataString=[[NSString alloc]initWithData:result encoding:NSUTF8StringEncoding];
    NSMutableDictionary *getResponseDict = [[NSMutableDictionary alloc] init];
    [getResponseDict addEntriesFromDictionary:[dataString JSONValue]];

}

しかし、 「エラー トレースは: ( "Error Domain=org.brautaset.JSON.ErrorDomain Code=3 \"認識されない先頭文字\" UserInfo=0x856ac50 {NSLocalizedDescription=認識されない先頭文字}」というエラーがスローされます。

値を投稿するには、画像を確認してください..

リクエスト タイプに「json/xml」のいずれかを指定する必要がありますか

ここに画像の説明を入力

事前にどうもありがとう

4

2 に答える 2

0

Web サービスで明示的に要求されない限り、要求タイプで json または xml を指定する必要はありません。webservice で処理する方がよいでしょう。

しかし、問題は応答の解析にあると思います。

最初にdataStringが null または空でないこと、またはサーバーから何らかの応答を得ていることを確認してください。

いくつかの値がある場合は、戻り値またはサーバーの応答が有効な JSON 形式ではない可能性があります。

http://jsonlint.com/に貼り付けることで、json 応答を検証できます 。

于 2013-01-18T10:07:49.210 に答える
0

これを使用してみてください。 httpMethod は「POST」です。postData は、Web サービス リクエストと同じ Key 値を持つすべての投稿データです。

aUrl はサービスの URL です

-(void)WebService:(NSString *)httpMethod DataDictionary:(id)postData RequestAction:(NSString *)aUrl
{
    // Check internet Connection
    //Use Reachability class for this==============
        Reachability *r = [Reachability reachabilityWithHostName:@"www.google.com"];
    NetworkStatus internetStatus = [r currentReachabilityStatus];
    if ((internetStatus != ReachableViaWiFi) && (internetStatus != ReachableViaWWAN))
    {
      NSLog("No Internet Connection Available");    
           return;
    }

    self.identifier = serviceIdentifier;

    NSMutableURLRequest *request=[NSMutableURLRequest requestWithURL:[NSURL URLWithString:aUrl] cachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:10.0 ];

        NSLog(@"final request is %@",request);


        [request setHTTPMethod:@"POST"];

        [request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];

//set body in JSON formate

        [request setHTTPBody:[[self convertToJSON:postData] dataUsingEncoding:NSUTF8StringEncoding]];  
        NSString    *contentLength = [NSString stringWithFormat:@"%d",[[request HTTPBody] length]]; 
        [request setValue:contentLength forHTTPHeaderField:@"Content-Length"];

        NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:request delegate:self]; 

        if (connection) 
        {
            self.responseData = [NSMutableData data]; //Its a mutable Data object
        }
}



//Convert data into JSOn format

//use JSON classes for this 
-(NSString *)convertToJSON:(id)requestParameters
{
    NSData *jsonData   = [NSJSONSerialization dataWithJSONObject:requestParameters options:NSJSONWritingPrettyPrinted error:nil];

    NSLog(@"JSON DATA LENGTH = %d", [jsonData length]);

    NSString *jsonString    = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];

    NSLog(@"JSON STR LENGTH = %d", [jsonString length]);

    return jsonString;

}

// NSURLConnection で応答を取得します

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
{
    [self.responseData setLength:0];
}

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{

    [self.responseData appendData:data];

}



- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
{
    NSLog("Failed to get Result......");


}

- (void)connectionDidFinishLoading:(NSURLConnection *)connection
{
    NSString *jsonString = [[[NSString alloc] initWithData:self.responseData encoding:NSUTF8StringEncoding] autorelease];

    NSDictionary    *aDic = [jsonString JSONValue];

   NSLog("Your Response Data is ==>> %d",aDic);

}

これがあなたに役立つことを願っています

于 2013-01-18T10:09:44.967 に答える