2016-11-10 3 views
2

Quick Frage: Ich registriere einen Benutzer zu meiner Datenbank mit Alamofire-Bibliothek. Ich habe den Endpunkt und die Parameter vom Backend-Entwickler bekommen und habe es selbst in Postman getestet, und die Daten sind in Ordnung. Ich implementiere es in meinem Register View Controller, habe aber keine Antwort erhalten. Hier ist meine Implementierung. FYI: Ich habe den Benutzertyp vom View Controller verlassen. Der Endbenutzer soll nicht wissen, dass es sich um den Benutzertyp 3 handelt. Ich könnte hier etwas falsch machen. Ich bekomme keine Antwort in der Ausgabe zurück.Alamofire http-Post - Registrierung Benutzer Swift 3

let params = ["username":usernameField.text!, 
        "firstname":firstNameField.text!, 
        "lastname":lastNameField.text!, 
        "password":passwordField.text!, 
        "usertype":"3", 
        "email":emailAddressField.text! 
    ] 

    let apiMethod = "http://api.example.com" 

    Alamofire.request(apiMethod, method: .post, parameters: params, encoding: URLEncoding.default).responseString { (response) in 

     print(response); 

     let alertController = UIAlertController(title: "REGISTRATION SUCCESSFUL!", message: nil, preferredStyle: .alert); 

     alertController.addAction(UIAlertAction(title: "OK", style: .default,handler: nil)); 

     self.present(alertController, animated: true, completion: nil) 

    } 



} 

     if let json = response.result.value as? Dictionary<String, String> { 
      print ("JSON: \(json)") 
      if (json["register_status"]! == "userExist") { 
       return 
     } else { 
       self.performSegue(withIdentifier: "registerSuccess", sender: self) 
      } 
      } 

Sobald der Benutzer meine Antwort sollte registriert hat richtig sein:

{ 
    "username": "userregister", 
    "register_status": "RegistrationComplete", 
    "register_date": "11/10/2016" 
} 

Aber wenn Benutzer vorhanden ist, dann würde ich diese Meldung zurück:

{ 
    "username": "userregister", 
    "register_status": "userExist", 
    "register_date": "11/10/2016" 
} 

Was ich tue, falsch in meinem Swift 3 Code?

Edit (Hinzufügen von Register-View-Controller) für Klarheit: Register View Controller for the above swift code

+0

Was ist der Fehler, den Sie gerade bekommen? –

+1

* Ich habe den Benutzertyp vom View Controller verlassen. Der Endbenutzer soll nicht wissen, dass es sich um den Benutzertyp 3 handelt. * Was meinst du !? Umformulieren Sie bitte – Honey

+0

@Honey Ich habe meinen Beitrag bearbeitet, um den View-Controller für Klarheit zu zeigen. Der Endbenutzer meldet sich als Kunde an (UserType 3). Hoffe das gibt dir ein besseres Verständnis. –

Antwort

0

Ihr Rückruf auf einem anderen Thread gemacht wird, so dass Sie Ihre Warnung Controller Präsentation Anruf in einem DispatchQueue.main.async Block wickeln müssen, weil alle ui Bedürfnisse auf dem Hauptthread geschehen oder Sie können seltsame Zeichnungs-/Timing-Fehler bekommen.

Wie auch immer, das ist wahrscheinlich nicht das Problem mit Ihrer Anfrage. Sie führen eine http-Anfrage aus, die ab iOS 9 standardmäßig deaktiviert ist. Sie müssen die App-Transport-Sicherheitsschlüssel explizit in Ihrer Datei info.plist festlegen. Sie können die Werte im Apple documentation sehen. Ich vermute, Sie wahrscheinlich beide NSAllowsArbitraryLoads und NSExceptionAllowsInsecureHTTPLoads.

+0

Hey Josh, das habe ich schon gemacht. Ich habe andere Formulare in der App, die Anfragen über die Alamofire-Bibliothek stellen. Nicht sicher, was das Problem mit diesem ist. –

+1

Sind Sie sicher, dass die Anfrage tatsächlich gemacht wird? Mach eine Pause vor der Alamofire Anfrage und drinnen.Selbst wenn die Zeit abgelaufen ist und fehlschlägt, sollten Sie immer noch eine Antwort mit einem Fehler anstelle von Daten erhalten. Das Standard-Timeout beträgt 60 Sekunden. Warten Sie also ab. –

1

Ich werde etwas wie das, wenn Ihre Antwort JSON ist. Dies wird Ihnen helfen, den Code zu debuggen. Außerdem würde ich vorschlagen, dass Sie Haltepunkte setzen und in der Konsole nach Antworten suchen.

Wenn Ihnen das nicht weiterhilft, geben Sie bitte Ihre Rest-Client-Anfrage-Payload frei, damit ich Ihnen weiterhelfen kann.

+0

Hallo meine URL ist https://api.example.com dann fand ich { Antwort = { Code = 301; msg = "falsche URL"; Erfolg = f; "success_ios" = 0; }; } was kann ich tun, bitte schlagen Sie mir vor .. –

+0

301 ist url nicht gefunden. Bitte stellen Sie sicher, dass Sie die richtige URL haben. Kannst du mehr Code teilen? –

0

Danke für die Hilfe @ hacker_1989 @Josh @Aaron gestern. Meine Lösung für die Registrierung von Benutzern mit Alamofire Bibliothek mit Swift 3 Sprache ist wie folgt:

@IBAction func registerTappedButton(_ sender: Any) { 
    if(userNameField.text == nil || (userNameField.text?.isEmpty)!) { 
     self.showAlertError("Username required", message: "") 
     return 
    } 
    if(firsNameField.text == nil || (firsNameField.text?.isEmpty)!) { 
     self.showAlertError("First Name required", message: "") 
     return 

    } 
    if(lastNameField.text == nil || (lastNameField.text?.isEmpty)!) { 
     self.showAlertError("Last Name required", message: "") 
     return 
    } 
    if(passwordField.text == nil || (passwordField.text?.isEmpty)!) { 
     self.showAlertError("Password required", message: "") 
     return 
    } 
    if(emailAddressField.text == nil || (emailAddressField.text?.isEmpty)!) { 
     self.showAlertError("Email Address required", message: "") 
    } 

    let params = ["username": userNameField.text!, 
        "firstname": firsNameField.text!, 
        "lastname": lastNameField.text!, 
        "password": passwordField.text!, 
        "usertype": 3, 
        "email": emailAddressField.text!] as [String : Any] 

    let apiMethod = "http://api.example.com" //<-Set your endpoint here 

    Alamofire.request(apiMethod, method: .post, parameters: params, encoding: JSONEncoding.default).responseString { (response) in 

     print(response); 

     let alertController = UIAlertController(title: "REGISTRATION SUCCESSFUL!", message: nil, preferredStyle: .alert); 

     alertController.addAction(UIAlertAction(title: "OK", style: .default,handler: nil)); 



     self.present(alertController, animated: true, completion: nil) 

    } 


} 

Der Back-End-Entwickler den Endpunkt geändert JSON-Objekt zu erwarten. Er hatte den Endpunkt so eingestellt, dass zuvor URL-codierte Parameter erwartet wurden.

Jetzt funktioniert alles gut. Daten werden erfolgreich übergeben.

Verwandte Themen