How can I access my local REST api from my android device?
Solution 1
SOLVED if anyone is interested:
I managed to fix this issue by extending the class my original sendGet(final String url)
was in as follows HttpClientUsage extends AsyncTask<String, Void, String>
more information and a tutorial can be found here: AsyncTask tutorial
I then had to configure my CORS settings on my local REST API as follows:
cors:
allowed-origins: "*"
allowed-methods: GET, PUT, POST, DELETE, OPTIONS
allowed-headers: "*"
exposed-headers:
allow-credentials: true
max-age: 1800
Thank you all for your help, it is much appreciated.
Solution 2
Let me tell you an easier way to do this. If you are using Android emulator you can use 10.0.2.2 as the IP address to connect to the host machine where your REST API is available.
Similarly if you are using Genymotion which uses Oracle Virtualbox, you can use 10.0.3.2.
Solution 3
Check your ip:- Steps to check ip (make sure you are connected to internet)
- Open command prompt
- type ipconfig
- Ip is the highlighted one in image below
Now make your url like this: http://192.168.240.2/index.html
Solution 4
Your rest url must be something like this - http://localhost:8080/yourRest/restMethod
.
Instead of localhost url connect your mobile and local machine on same network(wifi network). Get the ip address of your local machine e.g 192.168.1.X ...so now your end point url for rest will be http://192.168.1.X:8080/yourRest/restMethod
Comments
-
Alien almost 2 years
I have a spring REST api running locally on my computer. I would like to consume this api for android development.
Here is my get request:
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(); }
I can access my api via my device's browser. However, when I use this same url within the built apk to make the request, no connection is made.
My manifest includes:
<uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
Side notes:
I am connecting my device to my laptop running the rest api via usb. I am using the WLAN IPv4 address found by calling ipconfig.
Any tips in the right direction would be much appreciated - thanks!
Edit to include chrome browser (on android device) output from local REST api running on my laptop (A GET request to return default guest user information):
-
Alien over 7 yearsHey great thanks for the image upload, however I have tried this as well and still no luck from my apk file. I have attached an image in my original question to show the output from my device browser. I am calling this same address from my android build and not retrieving any response.
-
Alien over 7 yearsI can access my rest url no problem from my tablet device browser, but when I access the same url from my apk build I do not get a connection.
-
Alien over 7 yearsThanks for the comment. I have just tried doing this with an emulator and still no response from my host machine. Hmm...
-
rakesh kashyap over 7 yearsare you using android emulator?? can u check and let me know the details from emulator. settings->about phone->status->IP address
-
Alien over 7 yearsI was unable to find settings-->about phone etc.. so I ran
adb shell
ifconfig
with result: 10.0.2.15 -
rakesh kashyap over 7 yearson your emulator browser, can you try 10.0.2.2:8080 ?
-
Alien over 7 yearsI get a successful response from my get request when I call my api via the emulator browser.