如何从我的 android 设备访问我的本地 REST api?
Posted
技术标签:
【中文标题】如何从我的 android 设备访问我的本地 REST api?【英文标题】:How can I access my local REST api from my android device? 【发布时间】:2017-05-02 22:28:30 【问题描述】:我有一个 spring REST api 在我的计算机上本地运行。我想将此 api 用于 android 开发。
这是我的获取请求:
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();
我可以通过设备的浏览器访问我的 api。但是,当我在构建的 apk 中使用相同的 url 发出请求时,没有建立连接。
我的清单包括:
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
旁注:
我正在通过 USB 将我的设备连接到运行其余 api 的笔记本电脑。 我正在使用通过调用 ipconfig 找到的 WLAN IPv4 地址。
任何正确方向的提示将不胜感激 - 谢谢!
编辑以包含来自我笔记本电脑上运行的本地 REST api 的 chrome 浏览器(在 android 设备上)输出(返回默认访客用户信息的 GET 请求):
【问题讨论】:
您可以从android浏览器访问localhost:8080
吗?可能不是。 localhost
在所有设备上的含义不同。
尝试通过 localhost 检查this 连接到您的设备,访问您的文件并解析它
@cricket_007:我可以从我的安卓浏览器访问我的 WLAN IPv4 地址 + URI。我有一个api如下:
/api/users 返回所有用户的获取请求。我可以在我的 android chrome 浏览器中看到输出 JSON。但是当我在我的 android 设备 apk 版本中进行此调用时,我没有连接。
@Alien 我面临同样的问题。你有解决方案吗?
【参考方案1】:
让我告诉你一个更简单的方法来做到这一点。如果您使用的是 Android 模拟器,您可以使用 10.0.2.2 作为 IP 地址来连接到您的 REST API 可用的主机。
同样,如果您使用的是使用 Oracle Virtualbox 的 Genymotion,您可以使用 10.0.3.2。
【讨论】:
感谢您的评论。我刚刚尝试使用模拟器执行此操作,但我的主机仍然没有响应。嗯…… 你在用安卓模拟器吗??你可以检查并让我知道模拟器的详细信息。设置->关于手机->状态->IP地址 我无法找到设置-->关于手机等。所以我跑了adb shell
ifconfig
结果: 10.0.2.15
在你的模拟器浏览器上,你能试试 10.0.2.2:8080 吗?
当我通过模拟器浏览器调用我的 api 时,我的 get 请求得到了成功的响应。【参考方案2】:
检查你的 ip:- 检查ip的步骤(确保您已连接到互联网)
-
打开命令提示符
输入 ipconfig
Ip 是下图中突出显示的 IP
现在让你的网址像这样: http://192.168.240.2/index.html
【讨论】:
非常感谢您上传图片,但是我也尝试过,但我的 apk 文件仍然没有运气。我在原始问题中附上了一张图片,以显示我的设备浏览器的输出。我从我的 android 版本中调用了这个相同的地址,但没有检索到任何响应。【参考方案3】:您的 rest url 必须是这样的 - http://localhost:8080/yourRest/restMethod
。在同一网络(wifi 网络)上连接您的移动设备和本地计算机,而不是 localhost url。获取本地机器的 ip 地址例如 192.168.1.X ...所以现在您的休息端点 url 将是 http://192.168.1.X:8080/yourRest/restMethod
【讨论】:
我可以从我的平板设备浏览器访问我的 rest url 没有问题,但是当我从我的 apk 构建访问相同的 url 时,我没有连接。【参考方案4】:如果有人感兴趣,请解决:
我设法通过扩展我原来的sendGet(final String url)
所在的类来解决这个问题,如下HttpClientUsage extends AsyncTask<String, Void, String>
更多信息和教程可以在这里找到:AsyncTask tutorial
然后我必须在本地 REST API 上配置我的 CORS 设置,如下所示:
cors:
allowed-origins: "*"
allowed-methods: GET, PUT, POST, DELETE, OPTIONS
allowed-headers: "*"
exposed-headers:
allow-credentials: true
max-age: 1800
感谢大家的帮助,非常感谢。
【讨论】:
以上是关于如何从我的 android 设备访问我的本地 REST api?的主要内容,如果未能解决你的问题,请参考以下文章
Android - 如何在 WebView 中访问本地存储值?