/ Der Parameter / data ist null, wenn ich versuche, die Daten mit json - object-c vom Webservice abzurufen

Datenparameter ist Null, wenn ich versuche, die Daten vom Webservice mit json - objective-c abzurufen

- (NSDictionary*)PostWebService:(NSString*)completeURL param:(NSString*)value
{
@try
{
NSString *urlStr =[completeURL  stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSURL *url = [NSURL URLWithString:urlStr];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"POST"];
//NSString *urlPart=@"req=value";
//NSString *urlPart;
NSString *urlPart=[NSString stringWithFormat:@"req=%@", value];

NSLog(@"String %@",urlPart);
NSData *requestBody = [urlPart dataUsingEncoding:NSUTF8StringEncoding];
//NSLog(@"String %@",requestBody);
[request setHTTPBody:requestBody];
NSURLResponse *response = NULL;
NSError *requestError = NULL;
NSData *responseData = [NSURLConnection sendSynchronousRequest:request  returningResponse:&response error:&requestError];
NSString *responseString = [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding] ;
NSLog(@"String %@",responseString);
NSError* error;
NSDictionary* json = [NSJSONSerialization JSONObjectWithData:responseData
options:kNilOptions
error:&error];

return json;
}

@catch(NSException *e)
{
NSLog(@"reason is%@",e.reason);
}
}

und ich nenne diese Methode hier ..

-(NSDictionary*)gotvall:(NSString*)req
{
@try
{
NSString *vurl=@"some url/";

//   vurl=[vurl stringByAppendingString:@"req="];
// vurl=[vurl stringByAppendingString:req];
//  NSLog(@"%@",vurl);
NSDictionary *json=[self PostWebService:vurl param:req];
NSLog(@"json is%@",json);
return json;
}
@catch(NSException *e)
{
NSLog(@"%@",e.reason);
}
}

Nach dem Debuggen dieser Methode bekam ich das Ergebnis als Datenparameter nil. Kann mir jemand sagen, was ich hier falsch mache. Ich habe die vollständige URL erhalten, und wenn ich diese URL im Browser ausführte, erhielt ich die perfekten Daten, aber wenn ich den Wert von Json drucke, wird er zurückgegeben null.

Antworten:

2 für die Antwort № 1

Sie haben berichtet, dass Ihr Fehler war:

Fehlerdomäne = NSURLErrorDomain-Code = -1002"nicht unterstützte URL" UserInfo = 0x8d84960 {NSErrorFailingURLStringKey =% 20http: //www.hugosys.in/www.nett-ttp.no/api/vehicl‌e /, NSErrorFailingURLKey =% 20http: //www.hugosys.in/ .nett-torg.no / api / vehicle /, NSLocalizedDescription = nicht unterstützte URL, NSUnderlyingError = 0x8d8bfe0 "nicht unterstützte URL"}}

Das %20 In Ihrer Fehlermeldung steht ein Leerzeichen am Anfang Ihrer URL, das Ihr stringByAddingPercentEscapesUsingEncoding Anruf umgewandelt in %20. Wenn Sie diesen zusätzlichen Platz entfernen, sollten Sie in gutem Zustand sein.

Einige andere Beobachtungen:

  1. Nur um Sie zu warnen, Ihre Verwendung von stringByAddingPercentEscapesUsingEncoding wird das Vorhandensein eines Leerzeichens im req Wert. Bestimmte andere Charaktere werden jedoch nicht richtig behandelt (insbesondere & oder +). Wenn es möglich ist, dass diese Sortierzeichen im angezeigt werden req Wert möchten Sie möglicherweise den Anruf zu entfernen stringByAddingPercentEscapesUsingEncoding für die gesamte URL und stattdessen verwenden CFURLCreateStringByAddingPercentEscapes (Dadurch haben Sie ein wenig mehr Kontrolle über den prozentualen Fluchtprozess) req Wert. Siehe die percentEscapeString Methode in dieser Antwort: Daten an eine POST-NSURL-Anfrage anhängen.

  2. Sowohl in Ihrer Netzwerkanforderung als auch in Ihrem JSON-Analyseprozess geben Sie eine E-Mail zurück NSError Objekt. Ich könnte vorschlagen, dass Sie diese Werte protokollieren, wenn sie nichtnil, die Ihnen helfen wird, Probleme in der Zukunft zu diagnostizieren.

  3. Ich stelle fest, dass Sie die Ausnahmebehandlung verwenden. Das ist in Objective-C nicht üblich Programmierung in Objective-C Führer sagt:

    Umgang mit Fehlern

    Fast jede App stößt auf Fehler. Einige dieser Fehler liegen außerhalb Ihrer Kontrolle, z. B. wenn der Festplattenspeicher ausgeht oder die Netzwerkverbindung verloren geht. Einige dieser Fehler können behoben werden, z. B. ungültige Benutzereingaben. Während alle Entwickler nach Perfektion streben, können gelegentlich Programmierfehler auftreten.

    Wenn Sie von anderen Plattformen kommen undSprachen sind Sie möglicherweise daran gewöhnt, mit Ausnahmen für die Mehrzahl der Fehlerbehandlung zu arbeiten. Wenn Sie Code mit Objective-C schreiben, werden Ausnahmen nur für Programmierfehler verwendet, z. Dies sind die Probleme, die Sie beim Testen finden und beheben sollten, bevor Sie Ihre App versenden.

    Alle anderen Fehler werden durch Instanzen von dargestellt NSError Klasse. Dieses Kapitel enthält eine kurze Einführung in die Verwendung NSError Objekte, einschließlich der Arbeit mit Framework-Methoden, die möglicherweise fehlschlagen Weitere Informationen finden Sie unter Fehlerbehandlung Programmierhandbuch.

    Fazit: Wie ich im zweiten Punkt erwähnt habe, sollten Sie prüfen NSError Werte selbst zurückgeben, anstatt sich auf Ausnahmen in Objective-C zu verlassen.