无法从Android应用连接到localhost API

时间:2018-08-17 06:49:13

标签: java android django api localhost

我是Django的新手。我创建了一个名为http://127.0.0.1:8000/api/update/1/的API,它在浏览器和Postman应用程序中均能完美运行。

但是,当我尝试从Android应用访问API时,它返回NULL。

以下API时android代码有效。

http://newsapi.org/v1/articles?source=bbc-news&sortBy=top&apiKey=8190df9eb51445228e397e4185311a66

但是,即使下面的API在运行于同一台PC上的我的浏览器和Postman应用程序中也能正常工作时,该API也不起作用。

http://127.0.0.1:8000/api/update/1/

我正在附上进行API调用的代码。

protected String doInBackground(String... args) {
    String xml = "";
    String api = "http://127.0.0.1:8000/api/update/1/"; // returns NULL works in Postman app and in the browser
    // String api = "http://newsapi.org/v1/articles?source=bbc-news&sortBy=top&apiKey=8190df9eb51445228e397e4185311a66"; // works in all places
    String urlParameters = "";
    xml = Function.excuteGet(api, urlParameters);
    return  xml;
}

有人可以帮我吗?提前致谢。

9 个答案:

答案 0 :(得分:2)

1)Andoird 清单放置互联网权限和网络访问 2) 如果在本地机器上使用 Android 模拟器。使用 10.0.2.2。默认为 127.0.0.1 创建的别名,即losthoast。

它对我有用

答案 1 :(得分:0)

该API在POSTMAN中不起作用,我尝试http://127.0.0.1:8000/api/update/1/显示错误,因为它需要输入一些参数。

在这种情况下,http://newsapi.org/v1/articles?source=bbc-news&sortBy=top&apiKey=8190df9eb51445228e397e4185311a66所需的参数已提供给API,即源,sortBy和apiKey

答案 2 :(得分:0)

在本地主机中,您必须启动服务器并在同一系统中进行应用程序开发,然后才能为您工作。

答案 3 :(得分:0)

如果要从真实的android设备测试应用程序,则在尝试通过API连接到Django服务器时,需要输入PC的IP地址。是的,您也需要处于同一网络中。因此,您需要检查以下内容。

  1. 确保PC(正在运行服务器的地方)和Android设备(正在测试应用程序的地方)位于同一网络中(可能与同一Wifi网络连接)。
  2. 确保您已连接到运行服务器的PC的IP地址。例如,现在,您的PC的IP地址为192.168.0.100。然后,您需要连接到该IP地址并按如下所示调用您的API。

    http://192.168.0.100:8000/api/update/1/
    
  3. 确保您正在接受对PC中端口8000的请求。检查防火墙配置是否阻止了对8000端口的任何传入请求。如果发现阻塞,请使用以下命令允许对8000端口的传入请求。

    sudo ufw allow 8000/tcp
    

如果没有任何帮助的方法,请检查您的Android代码以检查API调用是否正常。我强烈建议使用Volley进行API调用suggested in developers文档。

最后但并非最不重要的一点,请检查您的AndroidManifest.xml文件中是否具有必要的权限。您需要添加以下权限,才能授予您的应用程序使用Internet的权限。

<uses-permission android:name="android.permission.INTERNET" /> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

答案 4 :(得分:0)

可以通过一些小的更改来调用本地api。这些是我从我的Android应用程序中访问本地django api的步骤。

  • 您需要连接到同一网络。更好地从您的PC或笔记本电脑创建一个热点,并将android与之连接
  • 从系统创建静态IP。如果您使用的是VM,则可能需要其他网络适配器。请在Google上搜索,因为同一视频上有很多视频和博客。
  • 在创建的本地IP上托管django。

那么您就可以使用Android应用了。

答案 5 :(得分:0)

请使用以下命令运行django开发服务器。

python manage.py runserver 0.0.0.0:8000

运行后,在新的终端窗口中,使用以下命令在wifi /网络子网中找到计算机的IP地址

Ipconfig or ifconfig (depends on your OS)

然后将api的基本URL从127.0.0.1更改为在上述步骤中找到的ip。现在,将正在测试您的应用程序的android手机连接到运行django的计算机所连接的同一个wifi或网络。 现在,您可以请求并接收响应。

127.0.0.1是系统的主页,您的android应用将无法访问它。您需要这样做。

答案 6 :(得分:0)

您无法从该本地设备访问外部的本地api。 127.0.0.1是它自己的本地地址。如果要从本地设备访问外部api,请用对外部开放的ip替换ip。例如,192.168.43.2是可从外部访问的IP。用可访问的ip更新您的api(在终端中使用ifconfig或ipconfig获取IP并使用该ip从outsid访问?)。另外,请确保您对AndroidManifest.xml文件具有适当的权限。

答案 7 :(得分:0)

为了能够连接您的本地主机(我假设您正在使用仿真器,如果没有,我可以编辑答案)

您需要使用以下网址:

http://10.0.2.2:8000/

答案 8 :(得分:-1)

无法从android调用本地API。离开它。