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;
}
誰かがこれを手伝ってくれる?前もって感謝します。
実際のAndroidデバイスからアプリケーションをテストしている場合、Djangoサーバーに接続しようとしている間、PCのIPアドレスを入力する必要があります。 APIを使用します。もちろん、同じネットワーク内にいる必要があるため、次のことを確認する必要があります。
サーバーが実行されているPCのIPアドレスに接続していることを確認します。たとえば、現在、PCのIPアドレスは192.168.0.100
です。次に、このIPアドレスに接続し、次のようにAPIを呼び出す必要があります。
http://192.168.0.100:8000/api/update/1/
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" />
ローカルホストに接続できるようにするため(私はあなたがエミュレーターを使用していると思いますが、そうでない場合は答えを編集できます)
次のURLを使用する必要があります。
http://10.0.2.2:8000/
次のコマンドを使用して、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アプリはそれにアクセスできません。このように行う必要があります。
そのローカルデバイスから外部のローカルAPIにアクセスすることはできません。 127.0.0.1は、それ自体のローカルアドレスです。ローカルデバイスから外部のAPIにアクセスする場合は、IPを外部に開いているIPに置き換えます。たとえば、192.168.43.2は外部からアクセスできるIPです。アクセス可能なIPでAPIを更新します(ターミナルでifconfigまたはipconfigを使用してIPを取得し、そのIPを使用してoutsidからアクセスしますか?)。また、AndroidManifest.xml
ファイルに適切な権限があるかどうかを確認してください。
ローカルホストでサーバーを起動し、同じシステムでアプリ開発を行う必要があります。そうすると、サーバーのみが機能します。
私が試した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
マイナーな変更を加えてローカルAPIを呼び出すことは可能です。これらは、ローカルDjango API from my Android app。
次に、Androidアプリと一緒に移動します。