使用 Cordova 的 Android 模拟器上的 Angular 应用程序上的 HTTP 请求失败

问题描述

我正在尝试在使用 Cordova 构建的 Angular 应用程序上访问托管在 http://localhost:8080 上的 Web 服务器。我可以使用模拟器上的导航器访问服务器,但我从未收到来自应用程序本身的任何请求,它只是失败并显示以下错误:[objectProgressEvent]。

我的请求是这样的,如果我构建托管在 localhost:8081 上的 Web 应用程序就可以工作:

getToken(username,password) {
        var req = { username: username,password: password };
        this.http.post(this.urlToken,req).toPromise().then((data) => {
            document.getElementById("loader").style.display = "none";
            for (let key in data) {
                this.token = data[key]
                localStorage.setItem('token',this.token);
            }
            if (void this.getIfActiveUser(username) != 84) {
                localStorage.setItem('user',username);
                this.authService.login();
            }
        }).catch((err: HttpErrorResponse) => {
            document.getElementById("loader").style.display = "none";
            this.getIfActiveUser(username)
            console.error('An error occurred:',err.error);
            document.getElementById("warning").style.display = "block";
            if (err.error["non_field_errors"])
                document.getElementById("warning").innerHTML = err.error["non_field_errors"];
            if (err.error["username"])
                document.getElementById("warning").innerHTML = err.error["username"]
            if (err.error["password"])
                document.getElementById("warning").innerHTML = err.error["password"]
        });
}

解决方法

Android API 默认不允许明文通信。 (CleartextTrafficPermitted) 您可以选中 this answer 以允许它。