2016-05-24 4 views
-1

Ich habe versucht, die unten REST Api mit PUT Methode.So machen Sie Ruhe API Anruf mit HTTP PUT Methode in Swift

Hier ist mein Code,

let url = NSURL(string: "http://sampleurl") 

let request = NSMutableURLRequest(URL: url!) 

request.addValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Content-Type") 

request.HTTPMethod = "PUT" 

let session = NSURLSession(configuration:NSURLSessionConfiguration.defaultSessionConfiguration(), delegate: nil, delegateQueue: nil) 

let params:[String: AnyObject] = ["deviceId" : "device_1","mobileDeviceId" : "abcd","deviceType":"ios"] 

request.HTTPBody = NSJSONSerialization.dataWithJSONObject(params, options: NSJSONWritingOptions(), error: nil) 

let dataTask = session.dataTaskWithRequest(request) { (data, response, error) -> Void in 

     if error != nil { 

      //handle error 

      print("Parsed error: '\(error)'") 
     } 
     else { 

      let jsonStr = NSString(data: data!, encoding: NSUTF8StringEncoding) 
      print("Parsed JSON: '\(jsonStr)'") 
     } 
    } 
dataTask.resume() 

Es funktioniert nicht. Bitte helfen Sie mir herauszufinden, wo es falsch ist.

+3

definiert – Wain

+0

Fehlerbeschreibung Parsed 'nicht funktioniert' Fehler: 'Fehlerdomäne = NSURLErrorDomain Code = -1005 "Die Netzwerkverbindung wurde unterbrochen." UserInfo = 0x7a7a8cc0 {NSErrorFailingURLStringKey = http: // smapleurl, _kCFStreamErrorCodeKey = -4, NSErrorFailingURLKey = http: // smapleurl, NSLocalizedDescription = Die Netzwerkverbindung ging verloren., _kCFStreamErrorDomainKey = 4, NSUnderlyingError = 0x7a6f4520 "Der Vorgang konnte nicht abgeschlossen werden. (kCFErrorDomainCFNetwork Fehler -1005.) "} ' Dieser Fehler tritt auf –

+0

Es kann ein Tippfehler sein, aber in Ihrem' let url = NSURL (Zeichenfolge:" http: // sampleurl ")' Ihre letzte '" 'ist nicht die richtige "". – Chajmz

Antwort

0

Definieren Sie die Put-Funktion wie folgt aus:

// 
// Put request 
// 
static func put(path: String, accessToken: Bool, data: Dictionary<String, AnyObject>, finish: (accessTokenX:String, data: JSON) ->()) { 
    apiRequest("PUT", path: path, accessToken: accessToken, contentType: nil, data: data) { (accessTokenX:String, data: AnyObject) in 
     dispatch_async(dispatch_get_main_queue(), { 
      finish(accessTokenX:accessTokenX, data: JSON(data)) 
     }) 
    } 
} 

Ein Anwendungsbeispiel:

// 
    // Update informations of the profile 
    // 
    static func accountUpdate(profile: [String: AnyObject], finish: (accessTokenX:String, data: JSON) ->()) { 
     let dataProfile = ["profile": profile] 
     API.put("https://stackoverflow.com/users/profile", accessToken: true, data: dataProfile) { accessTokenX, data in finish(accessTokenX:accessTokenX, data: data) 
     } 
    } 
-2

Try this !!!

http://jamesonquave.com/blog/making-a-post-request-in-swift/

func data_request() 
{ 
    let url:NSURL = NSURL(string: url_to_request)! 
    let session = NSURLSession.sharedSession() 

    let request = NSMutableURLRequest(URL: url) 
    request.HTTPMethod = "POST" 
    request.cachePolicy = NSURLRequestCachePolicy.ReloadIgnoringCacheData 

    let paramString = "data=Hello" 
    request.HTTPBody = paramString.dataUsingEncoding(NSUTF8StringEncoding) 

    let task = session.dataTaskWithRequest(request) { 
    (
     let data, let response, let error) in 

     guard let _:NSData = data, let _:NSURLResponse = response where error == nil else { 
      print("error") 
      return 
     } 

     let dataString = NSString(data: data!, encoding: NSUTF8StringEncoding) 
     print(dataString) 

    } 

    task.resume() 

} 
+0

Ich muss API mit Put-Methode aufrufen. Also bitte senden Api Anruf mit Http PUT Methode –

+0

@IOS Entwickler Ich gab den Hinweis, wie es funktioniert, so tun, die unten Abstimmung denken vorher auf das und versuchen Sie selbst –

+0

OP fragte nach einem PUT, kein POST – ablarg

1

Dies ist ein Arbeitscode, ich sende Ihr Wörterbuch als JSON-formatierte Zeichenfolge an den Server, und in dem Server analysieren ich die Anfrage und bauen Objekt eine andere JSON, die die gleichen Werte enthält als die Anfrage, und senden Sie sie an die App zurück. In der App analysiere ich die Antwort und drucken Sie die Ergebnisse:

let session = NSURLSession.sharedSession() 
      let url = "http://localhost:8080/yourServerGoesHere/putMethodTest" 
      let request = NSMutableURLRequest(URL: NSURL(string: url)!) 
      request.HTTPMethod = "PUT" 

      let params:[String: AnyObject] = ["deviceId" : "device_1","mobileDeviceId" : "abcd","deviceType":"ios"] 
      do{ 
       request.HTTPBody = try NSJSONSerialization.dataWithJSONObject(params, options: NSJSONWritingOptions()) 
       let task = session.dataTaskWithRequest(request, completionHandler: {(data, response, error) in 
        if let response = response { 
         let nsHTTPResponse = response as! NSHTTPURLResponse 
         let statusCode = nsHTTPResponse.statusCode 
         print ("status code = \(statusCode)") 
        } 
        if let error = error { 
         print ("\(error)") 
        } 
        if let data = data { 
         do{ 
         let jsonData = try NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions()) 
         let deviceId = jsonData["deviceId"] as! String 
         let mobileDeviceId = jsonData["mobileDeviceId"] as! String 
         let deviceType = jsonData["deviceType"] as! String 
         print (" deviceId= \(deviceId), mobileDeviceId= \(mobileDeviceId), deviceType= \(deviceType)") 
         }catch _ { 
          print ("the response is not well JSON formatted") 
         } 
        } 
       }) 
       task.resume() 
      }catch _ { 
       print ("Oops something happened buddy") 
      } 

Wenn Sie versuchen wollen, ist dies der Java-Web-Service-Code:

import javax.ws.rs.Consumes; 
import javax.ws.rs.GET; 
import javax.ws.rs.PUT; 
import javax.ws.rs.Path; 
import javax.ws.rs.PathParam; 
import javax.ws.rs.Produces; 
import javax.ws.rs.core.MediaType; 
import javax.ws.rs.core.Response; 
@Path("/putMethodTest") 
    @PUT 
    @Consumes(MediaType.TEXT_PLAIN) 
    public Response putMethodTest(String requestString) { 
     JSONObject requestJSON = new JSONObject(requestString); 
     String deviceId = requestJSON.getString("deviceId"); 
     String mobileDeviceId = requestJSON.getString("mobileDeviceId"); 
     String deviceType = requestJSON.getString("deviceType"); 
     JSONObject response = new JSONObject(); 
     response.put("deviceId", deviceId); 
     response.put("mobileDeviceId", mobileDeviceId); 
     response.put("deviceType", deviceType); 
     return Response.ok().entity(response.toString()).build(); 
    }