无法从 Android 应用程序连接到 localhost API

Maz*_*lam 9 java api django android localhost

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

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

当 API 如下时,android 代码有效。

http://newsapi.org/v1/articles?source=bbc-news&sortBy=top&apiKey=8190df9eb51445228e397e4185311a66
Run Code Online (Sandbox Code Playgroud)

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

http://127.0.0.1:8000/api/update/1/
Run Code Online (Sandbox Code Playgroud)

我附上了进行 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;
}
Run Code Online (Sandbox Code Playgroud)

谁能帮我这个?提前致谢。

Rea*_*hed 15

如果您是在真实的 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/
    
    Run Code Online (Sandbox Code Playgroud)
  3. 确保您正在接受对8000PC端口的请求。检查您的防火墙配置是否阻止了对8000端口的任何传入请求。如果发现阻塞,请8000使用以下命令允许传入请求到端口。

    sudo ufw allow 8000/tcp
    
    Run Code Online (Sandbox Code Playgroud)

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

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

<uses-permission android:name="android.permission.INTERNET" /> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
Run Code Online (Sandbox Code Playgroud)


Aru*_*n T 7

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

python manage.py runserver 0.0.0.0:8000
Run Code Online (Sandbox Code Playgroud)

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

Ipconfig or ifconfig (depends on your OS)
Run Code Online (Sandbox Code Playgroud)

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

127.0.0.1 是您系统的主目录,您的 Android 应用程序将无法访问它。你需要这样做。


dev*_*per 5

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

您需要使用以下网址:

http://10.0.2.2:8000/
Run Code Online (Sandbox Code Playgroud)