2016-03-21 9 views
0

Ich habe die folgende Methode in meinem Android-App, die ich für die Benutzeranmeldung/Registrierung verwenden.Konvertieren von Android Volley Anfrage an iOS NSURL asynchrone Anforderung

public void registerUser(final String username, final String email, final String password) { 
    pDialog.setMessage("Signing Up..."); 
    pDialog.show(); 

    request = new StringRequest(Method.POST, SL_URL, new Response.Listener<String>() { 
     @Override 
     public void onResponse(String s) { 
      pDialog.dismiss(); 
      String[] split = s.split("Config.php"); 
      String after = split[1]; 
      try { 
       JSONObject jsonObject = new JSONObject(after); 
       boolean error = jsonObject.getBoolean("error"); 
       if (error) { 
        String errorMsg = jsonObject.getString("error_msg"); 
        Toast.makeText(getApplicationContext(), 
          errorMsg, Toast.LENGTH_LONG).show(); 

       } else { 
        session.setLogin(true, username, email); 
       } 
      } catch (JSONException e) { 
       e.printStackTrace(); 
      } 
     } 
    }) { 
     @Override 
     protected Map<String, String> getParams() throws AuthFailureError { 
      HashMap<String, String> hashMap = new HashMap<>(); 
      hashMap.put("tag", "login"); 
      hashMap.put("username", name); 
      hashMap.put("password", password); 
      return hashMap; 
     } 
    }; 
    queue.add(request); 
} 

Jetzt schreibe ich meine App für iOS und versuchen, dies in Swift zu replizieren. Bisher habe ich den folgenden Code:

let username = usernameTxt.text 
     let password = passwordTxt.text 
     let urlPath: String = "***" 
     let url: NSURL = NSURL(string: urlPath)! 
     let request1: NSMutableURLRequest = NSMutableURLRequest(URL: url) 

     request1.HTTPMethod = "POST" 
     let stringPost="tag=login&username=" + username! + "&password=" + password! // Key and Value 
     NSLog(stringPost) 
     let data = stringPost.dataUsingEncoding(NSUTF8StringEncoding) 

     request1.timeoutInterval = 60 
     request1.HTTPBody=data 
     request1.HTTPShouldHandleCookies=false 

     let queue:NSOperationQueue = NSOperationQueue() 

     NSURLConnection.sendAsynchronousRequest(request1, queue: queue, completionHandler:{ (response: NSURLResponse?, data: NSData?, error: NSError?) -> Void in 
      do { 
       var jsonResult: NSDictionary = try NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions.MutableContainers) as! NSDictionary 
      } catch _ {} 

     }) 

Jetzt als jemand neu in iOS Entwicklung und Swift im Allgemeinen, ich habe folgende Fragen:

  1. Was ist der beste Weg, um die progressDialog ich zu replizieren Verwendung in Java in Swift, muss sie sichtbar sein, bis die Anforderung abgeschlossen ist und dann soll es zurückzuweisen. Ich vermute, dies sollte in den completionHandler platziert werden, aber ich bin nicht sicher, welche UI-Element für den Fortschritt Dialog zu verwenden.

  2. Wie erhalte ich meine Antwort als String und repliziere das Verhalten der Split-Funktion, und konvertiere das Ergebnis davon in ein jsonObject, wie ich es in meinem Java-Code mache.

  3. Was ist der beste Weg, der Toast zu replizieren verwendet, um die Fehlermeldung anzuzeigen. Ich denke nicht, dass die Verwendung eines Dialogs, der mit einem Button geschlossen werden muss, hier optimal ist.

Vielen Dank.

Antwort

1

Ich bin auch Anwendungen für Android und IOS zu entwickeln. Hier antwortete ich Ihre drei Probleme, die von mir konfrontiert wird auch als Anfänger. Ich hoffe, das würde dir helfen.

1) Verwendung MBProgressHUD Link die progressDialog in Swift .Es sind zwei Verfahren zum Replizieren der progressDialog zu zeigen und zu entlassen:

Verwenden showLoadingHUD() vor HTTP-Anforderung

private func showLoadingHUD() { 
    let hud = MBProgressHUD.showHUDAddedTo(self.view, animated: true) 
    hud.labelText = "Loading..." 
} 

Und hideLoadingHUD machen() nachdem er die Antwort vom Server

Empfang
private func hideLoadingHUD() { 
    MBProgressHUD.hideAllHUDsForView(self.view, animated: true) 
} 

2) können Sie Alamofire verwenden Link die kann Netzwerk-stuff handhaben Und Sie können leicht Antwort in String erhalten. Beispiel:

self.showLoadingHUD() 
       Alamofire.request(.GET, data, parameters: nil) 
        .response { (request, response, data, error) in 
         print(data) // if you want to check data in debug window. 
         let Result = NSString(data: data!, encoding: NSUTF8StringEncoding) 
         Result!.stringByReplacingOccurrencesOfString("\"", withString: "") 
         if(newResult == "1"){ 
          self.navigationController!.popViewControllerAnimated(true) 
          JLToast.makeText("Success").show() 
         } 
         else if (newResult == "0"){ 
          JLToast.makeText("Failed").show() 
         } 

         self.hideLoadingHUD() 

3) mankee Toas sind für einen Zweck verwendet, um Informationen für die kurze Zeit des Anzeigens und selbst verschwinden. Hier können wir Android wie Toast verwenden, was JLToast ist. Verfügbar auf GitHub.

JLToast.makeText("Success").show() 
Verwandte Themen