2
votes

La connexion réseau a été perdue d'Alamofire

J'ai eu cette erreur plusieurs fois dans mon projet et cela m'irrite beaucoup car j'ai une connectivité Internet complète bien que j'obtienne cette erreur à plusieurs reprises. EdwfR.png "rel =" nofollow noreferrer ">  entrez la description de l'image ici

Quelle est la solution ...?

J'utilise

Swift - 3.3

Alamofire - 4.7.3

Code d'appel de l'API:

class  func post(_ URL: String, withParams params: [String : AnyObject], onView parentView: UIViewController, hnadler completion: @escaping ([AnyHashable: Any]!) -> Void) {
        var URLString  = String()
        URLString = APIConstants.kServerURL + URL
        var headers = [String: String]()
        headers["Content-Type"] = "application/x-www-form-urlencoded"
        
        Alamofire.request(URLString,method: .post, parameters: params , headers : headers)
            .validate(contentType: ["application/vnd.api+json"])
            .responseJSON { response in
                switch response.result {
                case .success( _):
                    var completionVarible = [NSObject : AnyObject]()
                    completionVarible = response.result.value as! [AnyHashable: Any]! as [NSObject : AnyObject]
                    completion(completionVarible)
                case .failure(let error):
                    self.handleFailureResponse(Error: error as NSError?, parentView: parentView)
                }
        }
    }


11 commentaires

Ajoutez votre code pour vérifier


var URLString = String () URLString = APIConstants.kServerURL + URL var headers = [String: String] () headers ["Content-Type"] = "application / x-www-form-urlencoded" Alamofire.request (URLString, méthode : .post, paramètres: params, headers: headers) .validate (contentType: ["application / vnd.api + json"]) .responseJSON {réponse dans}


J'ai appelé api comme normalement nous implémentons


Modifiez votre question avec ce code


@ParthPatel nous montre ce qui se passe à la fin de l'appel Alamofire, je ne crois pas qu'Alamofire affiche les erreurs sous forme d'alertes ...


Veuillez vérifier le code que j'ai modifié ma question avec le code.


@ParthPatel et que se passe-t-il à la fin de post ?


@RobertDresler c'est renvoyer les données de réponse de l'API.


@RobertDresler Lorsque cette erreur se produit. Il n'exécute que les cas d'échec.


Essayez en cas d ' échec case print error , qu'obtenez-vous? Je crois que vous définissez La connexion réseau a été perdue chaque fois qu'une erreur se produit, vous ne pouvez pas trouver une erreur ...


@RobertDresler Veuillez vérifier le code que j'appelle une méthode en échec et cette méthode n'affiche que l'alerte qui est en erreur! .LocalizedDescription.


3 Réponses :


0
votes

Je ne sais pas exactement pourquoi cette erreur se produit mais j'ai également rencontré cette erreur, j'ai donc mis une solution. Cette erreur a un code d'erreur unique. Vérifiez donc ce code d'erreur et ignorez l'alerte là-bas ou vous pouvez à nouveau essayer cet appel d'API si vous obtenez ce code d'erreur.


0 commentaires

1
votes

Si l'alerte apparaît immédiatement, vous pouvez essayer de changer la politique de cache en .reloadIgnoringCacheData


1 commentaires

Où dois-je changer de politique?



0
votes

Je trouve une solution à ce problème si vous utilisez Alamofire.

Commencez par importer Alamofire dans votre classe commune, sinon vous pouvez créer une classe distincte pour vérifier la connexion Internet.

importer Alamofire

if !Connectivity.isConnectedToInternet() {
            ServiceHandler.ShowAlert(message: "Check your internet connectivity.", title: "Error", parentView: self) //This is my comman method for display alert.
            return
        }

Appelez la méthode ci-dessous avant d'appeler l'API

class Connectivity {
    class func isConnectedToInternet() ->Bool {
        return NetworkReachabilityManager()!.isReachable
    }
}


2 commentaires

J'ai appliqué la même logique pour ce problème, mais celui-ci n'aidera pas. vous obtiendrez la même erreur.


Oui, j'obtiens maintenant une erreur réseau avant l'appel d'API.