无法从安卓应用连接到本地主机 API

2022-09-03 17:58:17

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

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

当 API 如下所示时,Android 代码可以正常工作。

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

但是,当API如下时,它不起作用,即使以下API在同一台PC上运行的浏览器和Postman应用程序中工作正常。

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;
}

任何人都可以帮我吗?提前致谢。


答案 1

如果您从真正的Android设备测试应用程序,那么当您尝试通过API连接到Django服务器时,您需要输入PC的IP地址。是的,您也需要在同一网络中。因此,您需要检查以下事项。

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

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

    sudo ufw allow 8000/tcp
    

如果没有任何帮助,请检查您的Android代码以检查API调用是否正常。我强烈建议使用 Volley 进行开发人员文档中建议的 API 调用。

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

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

答案 2

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

您需要使用以下网址:

http://10.0.2.2:8000/

推荐