web-dev-qa-db-ja.com

Androidアプリからlocalhost APIに接続できません

Djangoは初めてです。私はhttp://127.0.0.1:8000/api/update/1/という名前のAPIを作成しましたが、それはブラウザーでもPostmanアプリでも完全に機能します。

ただし、AndroidアプリからAPIにアクセスしようとすると、NULLが返されます。

Androidコードは、APIが次の場合に機能します。

http://newsapi.org/v1/articles?source=bbc-news&sortBy=top&apiKey=8190df9eb51445228e397e4185311a66

ただし、次のAPIが同じPCで実行されているブラウザーやPostmanアプリケーションから正常に機能しても、APIが以下の場合は機能しません。

http://127.0.0.1:8000/api/update/1/

API呼び出しを行うコードを添付しています。

protected String doInBackground(String... args) {
    String xml = "";
    String api = "http://127.0.0.1:8000/api/update/1/"; // returns NULL works in Postman app and in the browser
    // String api = "http://newsapi.org/v1/articles?source=bbc-news&sortBy=top&apiKey=8190df9eb51445228e397e4185311a66"; // works in all places
    String urlParameters = "";
    xml = Function.excuteGet(api, urlParameters);
    return  xml;
}

誰かがこれを手伝ってくれる?前もって感謝します。

3
Mazharul Islam

実際のAndroidデバイスからアプリケーションをテストしている場合、Djangoサーバーに接続しようとしている間、PCのIPアドレスを入力する必要があります。 APIを使用します。もちろん、同じネットワーク内にいる必要があるため、次のことを確認する必要があります。

  1. PC(サーバーを実行している場所)とAndroidデバイス(アプリケーションをテストしている場所))が同じネットワークにあることを確認します(同じWifiネットワークに接続されている可能性があります)。
  2. サーバーが実行されているPCのIPアドレスに接続していることを確認します。たとえば、現在、PCのIPアドレスは192.168.0.100です。次に、このIPアドレスに接続し、次のようにAPIを呼び出す必要があります。

    http://192.168.0.100:8000/api/update/1/
    
  3. PCのポート8000へのリクエストを受け入れていることを確認してください。ファイアウォール構成が8000ポートへの着信要求をブロックしていないか確認してください。ブロッキングが見つかった場合は、以下を使用して8000ポートへの受信リクエストを許可してください。

    Sudo ufw allow 8000/tcp
    

役に立たないものがある場合は、Androidコードを確認して、API呼び出しに問題がないかどうかを確認してください。API呼び出しにVolleyを使用することを強くお勧めします 開発者に推奨 ドキュメント。

最後に、重要なことですが、AndroidManifest.xmlファイルに必要な権限があるかどうかを確認してください。アプリケーションにインターネットの使用を許可するには、次の権限を追加する必要があります。

<uses-permission Android:name="Android.permission.INTERNET" /> 
<uses-permission Android:name="Android.permission.ACCESS_NETWORK_STATE" />
5
Reaz Murshed

ローカルホストに接続できるようにするため(私はあなたがエミュレーターを使用していると思いますが、そうでない場合は答えを編集できます)

次のURLを使用する必要があります。

http://10.0.2.2:8000/
0
aomerk

次のコマンドを使用して、Django開発サーバーを実行してください。

python manage.py runserver 0.0.0.0:8000

実行したら、次のコマンドを使用して、新しいターミナルウィンドウでwifi /ネットワークサブネット内のコンピューターのIPアドレスを確認します。

Ipconfig or ifconfig (depends on your OS)

次に、APIのベースURLを127.0.0.1から上記のステップで見つけたIPに変更します。 Android電話を、Djangoを実行しているコンピュータが接続されているのと同じwifiまたはネットワークに接続します。これで、リクエストと応答を受け取ります。

127.0.0.1はシステムのホームであり、Androidアプリはそれにアクセスできません。このように行う必要があります。

0
Arun T

そのローカルデバイスから外部のローカルAPIにアクセスすることはできません。 127.0.0.1は、それ自体のローカルアドレスです。ローカルデバイスから外部のAPIにアクセスする場合は、IPを外部に開いているIPに置き換えます。たとえば、192.168.43.2は外部からアクセスできるIPです。アクセス可能なIPでAPIを更新します(ターミナルでifconfigまたはipconfigを使用してIPを取得し、そのIPを使用してoutsidからアクセスしますか?)。また、AndroidManifest.xmlファイルに適切な権限があるかどうかを確認してください。

0
mahfuz195

ローカルホストでサーバーを起動し、同じシステムでアプリ開発を行う必要があります。そうすると、サーバーのみが機能します。

0
Prudhvi Bsecure

私が試したPOSTMANでAPIが機能していません http://127.0.0.1:8000/api/update/1/ いくつかのパラメーターを入力する必要があるため、エラーが表示されます。

この場合、 http://newsapi.org/v1/articles?source=bbc-news&sortBy=top&apiKey=8190df9eb51445228e397e4185311a66 必要なパラメーターがAPIに提供されています。つまり、source、sortBy&apiKey

0
Anjani Mittal

マイナーな変更を加えてローカルAPIを呼び出すことは可能です。これらは、ローカルDjango API from my Android app。

  • 同じネットワークに接続する必要があります。 PCまたはラップトップからホットスポットを作成し、Androidで接続することをお勧めします
  • システムから静的IPを作成します。 VM=を使用している場合は、追加のネットワークアダプターが必要になる可能性があります。同じ上にビデオやブログがたくさんあるので、ググってください。
  • Host Django作成されたローカルIP上。

次に、Androidアプリと一緒に移動します。

0
Aman trigunait