2016-12-17 50 views
4

我有一个在我的电脑上本地运行的spring REST api。我想为Android开发使用这个api。如何从我的android设备访问本地REST api?

这里是我的GET请求:

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的REST API。 我正在使用通过调用ipconfig找到的WLAN IPv4地址。

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

编辑,包括Chrome浏览器(Android设备上)输出从本地REST API在我的笔记本电脑(GET请求返回默认的guest用户信息)运行: enter image description here

+0

您可以从** android浏览器**访问'localhost:8080'?可能不会。 'localhost'在所有设备上表示不同的东西。 –

+1

尝试连接到您的设备通过本地检查[这](http://stackoverflow.com/questions/4779963/how-can-i-access-my-localhost-from-my-android-device),访问您的文件和解析它 – Mohit

+0

@ cricket_007:我可以从我的android浏览器访问我的WLAN IPv4地址+ URI。我有一个API如下: – Dayna

回答

1

解决的,如果有人有兴趣:

我设法通过如下HttpClientUsage extends AsyncTask<String, Void, String>更多的信息和指南可以在这里找到扩展类我原来sendGet(final String url)是解决这个问题: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 

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

1

休息url必须是这样的 - http://localhost:8080/yourRest/restMethod
而不是本地主机url连接您的手机和本地机器在同一网络(wifi网络)。获取本地计算机如192.168.1.X的IP地址...所以现在休息的终点URL将被http://192.168.1.X:8080/yourRest/restMethod

+0

我可以从我的平板设备浏览器访问我的休息网址,但是当我从我的apk版本访问相同的网址时,我没有连接。 – Dayna

3

检查您的IP: - 步骤检查IP(请确保您连接到互联网)

  1. 打开命令提示
  2. 类型IPCONFIG
  3. IP是下面
突出一个在图像

enter image description here

现在使你的URL是这样的: http://192.168.240.2/index.html

+0

嘿非常感谢您的图片上传,但我已经尝试了这一点,仍然没有运气从我的apk文件。我在原始问题中附加了一个图像,以显示设备浏览器的输出。我从我的android构建调用这个相同的地址,并没有检索任何响应。 – Dayna

2

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

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

+0

感谢您的评论。我刚刚尝试过用模拟器做这件事,而且我的主机仍然没有回应。嗯... – Dayna

+0

你使用的是android模拟器?你可以检查并让我知道模拟器的细节。设置 - >关于手机 - >状态 - > IP地址 –

+0

我找不到设置 - >关于手机等。 2.15 – Dayna

相关问题