无法使用api调用登录,也无法保存访问ID

时间:2016-10-25 13:09:59

标签: ios json swift

这是我正在处理的第一个应用程序。我有一个用于登录呼叫功能的api url。当我输入用户名,密码。它将生成一个客户ID。我需要保存即可,并且我必须在我的所有屏幕上使用该特定ID,直到用户退出。

但是当我正在做api呼叫登录时。它不起作用。请帮帮我。

这是我的参数传递:

{
    "username" : "u@gmail.com",  
    "password" : "u123"
}

登录api调用后我的json输出:

{
  "status": 1,
  "message": "Login success.",
  "CustomerDetails": {
    "CustomerId": "1",
    "CustomerName": "u",
    "CustomerEmail": "u@gmail.com",
    "CustomerMobile": "901",
    "CustomerAddress": "#45, 7th main road."
  }
}

在此我需要保存CustomerId,我必须将CustomerId用于我的所有屏幕。

我的api在登录按钮时调用功能:

  func getcartdetaildata () {
        let headers = [
            "cache-control": "no-cache",
            "postman-token": "4c933910-0da0-b199-257b-28fb0b5a89ec"
        ]

        let jsonObj:Dictionary<String, Any> = [

                "username" : "\(UsernameEmail)",
                "password" : "\(Password)"

        ]


        if (!JSONSerialization.isValidJSONObject(jsonObj)) {
            print("is not a valid json object")
            return
        }

        if let postData = try? JSONSerialization.data(withJSONObject: jsonObj, options: JSONSerialization.WritingOptions.prettyPrinted) {
            let request = NSMutableURLRequest(url: NSURL(string: "http://Login.php")! as URL,
                                              cachePolicy: .useProtocolCachePolicy,timeoutInterval: 10.0)
            request.httpMethod = "POST"
            request.allHTTPHeaderFields = headers
            request.httpBody = postData

            let session = URLSession.shared
            let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
                if (error != nil) {
                    ///print(error)
                } else {

                    print("123.......... ")

                    DispatchQueue.main.async(execute: {

                        if let json = (try? JSONSerialization.jsonObject(with: data!, options: [])) as? Dictionary<String,AnyObject>
                        {

                            print(json)

                            let status = json["status"] as? Int;
                            if(status == 1)
                            {
                                print("asdasdasx.......... ")

                               // let access_token = json["CustomerId"]

                                //print(access_token)
                                DispatchQueue.main.async(execute: {

//                                    
//                                    
//                                    //Set logged in to true
//                                    UserDefaults.standard.set(true, forKey: "ISLOGGEDIN")
//                                    
//                                    //Set access token
//                                    UserDefaults.standard.setValue(access_token, forKey: "CustomerId")
//                                    
//                                    UserDefaults.standard.synchronize()
//                                    


                                    })

                            }
                        }
                    })
                }
            })

            dataTask.resume()
        }
    }

请帮帮我。

由于

1 个答案:

答案 0 :(得分:0)

func apicalling () {

    let Username:NSString = EmailTextField.text! as NSString
    let password:NSString = PasswordTextField.text! as NSString

    let headers = [
        "content-type": "application/json",
        "cache-control": "no-cache",
        "postman-token": "4c933910-0da0-b199-257b-28fb0b5a89ec"
    ]
    let parameters = [
             "username": "\(Username)",
            "password": "\(password)"
    ]
    do {
        let postData = try JSONSerialization.data(withJSONObject: parameters, options :[])
        let request = NSMutableURLRequest(url: NSURL(string: "http://Login.php")! as URL,cachePolicy: .useProtocolCachePolicy,timeoutInterval: 10.0)
        request.httpMethod = "POST"
        request.allHTTPHeaderFields = headers
        request.httpBody = postData

        let session = URLSession.shared
        let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
            if (error != nil) {
                ///print(error)
            } else {

            DispatchQueue.main.async(execute: {

            if let json = (try? JSONSerialization.jsonObject(with: data!, options: [])) as? Dictionary<String,AnyObject>
                    {
                        let status = json["status"] as? Int;
                        if(status == 1)
                        {
                           print(json)
                          }

                    }
                })
             }
        })

        dataTask.resume()



    } catch {
        // print("JSON serialization failed:  \(error)")
    }
}

NSUserDefaults中保存数据的代码。

let userDefaults = NSUserDefaults.standardUserDefaults()
userDefaults.setValue(YOUR_VALUE, forKey: "PASSKEY")
userDefaults.synchronize() // don't forgot this line      

从NSUserDefaults中重新获取数据

if let VARIABLE = userDefaults.valueForKey("PASSKEY") {
    // do something here when a Data exists
}
else {
    // no data exists
}