我是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;
}
有人可以帮我吗?提前致谢。
答案 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地址。是的,您也需要处于同一网络中。因此,您需要检查以下内容。
确保您已连接到运行服务器的PC的IP地址。例如,现在,您的PC的IP地址为192.168.0.100
。然后,您需要连接到该IP地址并按如下所示调用您的API。
http://192.168.0.100:8000/api/update/1/
确保您正在接受对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的步骤。
那么您就可以使用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。离开它。