如何从我的Android设备访问我的本地REST API?

Ali*_*ien 10 java api rest android localhost

我的计算机上有一个本地运行的Spring REST api.我想在Android开发中使用这个api.

这是我的获取请求:

public static String sendGet(final String url) {
        StringBuilder result = new StringBuilder();
        HttpURLConnection urlConnection = null;
        try {
            String apiUrl = getAbsoluteUrl(url); // concatenate uri with base url eg: localhost:8080/ + uri
            URL requestUrl = new URL(apiUrl);
            urlConnection = (HttpURLConnection) requestUrl.openConnection();
            urlConnection.connect(); // no connection is made
            InputStream in = new BufferedInputStream(urlConnection.getInputStream());
            BufferedReader reader = new BufferedReader(new InputStreamReader(in));
            String line;
            while ((line = reader.readLine()) != null) {
                result.append(line);
            }

        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            urlConnection.disconnect();
        }
        return result.toString();
    }
Run Code Online (Sandbox Code Playgroud)

我可以通过设备的浏览器访问我的api.但是,当我在构建的apk中使用此相同的URL来发出请求时,不会建立任何连接.

我的清单包括:

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

附注:

我正在将我的设备连接到我的笔记本电脑上,通过usb运行其余的api.我正在使用通过调用ipconfig找到的WLAN IPv4地址.

任何正确方向的提示都将非常感谢 - 谢谢!

编辑以包括从我的笔记本电脑上运行的本地REST api输出的chrome浏览器(在Android设备上)(A GET请求返回默认访客用户信息): 在此输入图像描述

rak*_*yap 8

让我告诉您一种更简单的方法。如果您使用的是Android模拟器,则可以使用10.0.2.2作为IP地址连接到可以使用REST API的主机。

同样,如果您使用的是使用Oracle Virtualbox的Genymotion,则可以使用10.0.3.2。


Mri*_*moy 6

检查你的IP: - 检查ip的步骤(确保你已连接到互联网)

  1. 打开命令提示符
  2. 输入ipconfig
  3. Ip是下图中突出显示的一个

在此输入图像描述

现在让你的网址像这样:http://192.168.240.2/index.html


Sha*_*oid 5

您的休息网址必须是这样的- http://localhost:8080/yourRest/restMethod
而不是 localhost url 在同一网络(wifi 网络)上连接您的移动和本地机器。获取您本地机器的 IP 地址,例如 192.168.1.X ...所以现在您的端点 url 将是http://192.168.1.X:8080/yourRest/restMethod

  • 我可以从平板设备浏览器访问我的 rest url 没问题,但是当我从我的 apk 版本访问相同的 url 时,我没有连接。 (2认同)

Ali*_*ien 4

如果有人感兴趣,已解决:

我设法通过扩展我原来所在的类来解决此问题,sendGet(final String url)如下所示HttpClientUsage extends AsyncTask<String, Void, String>可以在此处找到更多信息和教程:AsyncTask 教程

然后,我必须在本地 REST API 上配置 CORS 设置,如下所示:

 cors:
        allowed-origins: "*"
        allowed-methods: GET, PUT, POST, DELETE, OPTIONS
        allowed-headers: "*"
        exposed-headers:
        allow-credentials: true
        max-age: 1800
Run Code Online (Sandbox Code Playgroud)

感谢大家的帮助,非常感谢。