web-dev-qa-db-ja.com

ローカルのREST apiからAndroidデバイス?

私は自分のコンピューターでローカルに実行されている春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アドレスを使用しています。

正しい方向へのヒントは大歓迎です-ありがとう!

編集して、chrome browser(on Android device)output from local REST api laptop on my laptop(A GET requestデフォルトのゲストユーザー情報を返すには): enter image description here

10
Alien

誰かが興味があるなら解決しました:

元の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

あなたの助けをありがとう、それは大歓迎です。

3
Alien

これを行う簡単な方法を教えてください。 Androidエミュレータを使用している場合、IPアドレスとして10.0.2.2を使用して、REST APIが利用可能なホストマシンに接続できます。

同様に、Oracle Virtualboxを使用するGenymotionを使用している場合は、10.0.3.2を使用できます。

8
rakesh kashyap

IPを確認してください:-IPを確認する手順(インターネットに接続していることを確認してください)

  1. コマンドプロンプトを開く
  2. タイプipconfig
  3. Ipは下の画像で強調表示されているものです

enter image description here

次のようにURLを作成します:http://192.168.240.2/index.html

6
Mrinmoy

残りのURLは次のようにする必要があります-http://localhost:8080/yourRest/restMethod
localhost urlの代わりに、同じネットワーク(wifiネットワーク)上のモバイルマシンとローカルマシンを接続します。ローカルマシンのIPアドレスを取得しますe.g 192.168.1.X ...これで、残りのエンドポイントURLはhttp://192.168.1.X:8080/yourRest/restMethod

4
Shadow Droid