Nativescript http.post()用于IP地址的MalformedURLException

时间:2017-07-14 00:14:52

标签: android nativescript

问题:http.post()返回

  

错误:java.net.MalformedURLException:找不到协议:   ZoneAwareError的192.168.1.14:8080/newuser

代码(user.service.ts):



import { Injectable } from "@angular/core";
import { Http, Headers, Response } from "@angular/http";
import { Observable } from "rxjs/Rx";
import "rxjs/add/operator/do";
import "rxjs/add/operator/map";

import { User } from "./user";
import { Config } from "../config";

@Injectable()
export class UserService {
  constructor(private http: Http) {}

  register(user: User) {
    let headers = new Headers();
    headers.append("Content-Type", "application/json");


    return this.http.post(
      "192.168.1.14:8080/newuser",
      JSON.stringify({
        username: user.email,
        password: user.password
      }),
      { headers: headers }
    )
    .catch(this.handleErrors);
  }

  handleErrors(error: Response) {
    console.log(JSON.stringify(error.json()));
    return Observable.throw(error);
  }
}




通过杂货教程(第3章:服务),我无法访问用户的后端API,因此我使用NodeJS(在我的网络上托管OPi)编写了自己的api。我可以使用我的dev comp发布,我可以从模拟器的浏览器访问GET请求,但是当我尝试发布IP:端口时,我得到MalformedURLException

如何发布到此网址?我能找到的所有Nativescript http.post()示例都使用基于DNS的URL;甚至可以做基于IP的请求吗?

1 个答案:

答案 0 :(得分:1)

是的,可以使用基于IP的请求。 但是,您需要提供http://前缀,并且在使用模拟器时,您应该考虑环回地址与开发计算机上的不同

使用Android AVD时,环回地址为10.0.2.2(对于GenyMotio,环回不同),而在iOS上,环回为localhost。因此,如果您想使用本地IP地址,则需要考虑这一点。

e.g。 here