

以下のjsonデータが返ってくるURLは <http://127.0.0.1:8000/api/v1/> です  
シミュレータ上では正しくレスポンスが取得できましたが，実機で試みたところ，取得できませんでした．どうすれば良いでしょうか？  
使用しているのはAlamofire4.0です．

JSON

[code]

    {
    "books": [
    {
      "id": 1, 
      "name": "Django入門", 
      "publisher": "GeekLab Nagano", 
      "page": 10, 
      "impressions": [
        {
          "id": 1, 
          "comment": "途中で\r\n眠くなった。"
        }, 
        {
          "id": 2, 
          "comment": "ああ"
        }, 
        {
          "id": 3, 
          "comment": "いい"
        }
      ]
    }, 
    {
      "id": 2, 
      "name": "Raspberry Pi 入門", 
      "publisher": "GeekLab Nagano", 
      "page": 15, 
      "impressions": []
    }
    ]
    }
    
[/code]

コード

[code]

    var tableTitle = [String]()
    var tableDetail = [String]()
    let url:String = "http://127.0.0.1:8000/api/v1/"
    
    func loadData() {
        Alamofire.request(url).responseJSON {
            response in
    
            guard let value = response.result.value else {
                return
            }
            let json = JSON(value)
            let books = json["books"]
    
            for item in books.arrayValue {
                self.tableTitle.append(item["name"].stringValue)
                self.tableDetail.append(item["publisher"].stringValue)
            }
    
            print(self.tableTitle)
            print(self.tableDetail)
    
    
            self.tableView.reloadData()
        }
    }
    
[/code]


CC BY-SA 3.0
2016-11-28T17:58:33.037
30755
2022-09-02T09:02:30.307
2016-11-30T07:46:01.183
19540
19540
question
swift ios json django alamofire
Djangoで作成したAPIでGETしたJSONデータを実機のTableViewに反映させたい


Djangoを実行する時のデフォルトのホストである`127.0.0.1`だとDjangoを実行したマシンからしかアクセスできませんので、以下の様に起動して下さい。

[code]

    python manage.py runserver 0.0.0.0:8000
    
[/code]

これで同じネットワーク上の他のマシンから`http://<Djangoを実行しているマシン名またはIPアドレス>:8000/`でアクセスできるようになります。

### 追記

> シミュレータ上では正しくレスポンスが取得できましたが，実機で試みたところ，取得できませんでした．どうすれば良いでしょうか？

「取得できませんでした」だとどういう状況かわかりません。  
HTTPリクエストでうまくいかない状況としては

  * サーバーに接続できない
  * サーバーからレスポンスは返ってくるけどHTTPステータスコードがエラー(500など)になっている
  * サーバーからのレスポンスでコンテンツ(今回でいうとJSONデータ)が正しく取得できない

などがあります。

これらのどこでうまくいっていないかによって、原因と対応方法は変わってきます。  
自分はSwingはわからないので具体的にどう確認すればいいのかは書けませんが、HTTP通信をする際はこれらのどこでうまくいっていないかを確認することをお勧めします。

### 追記2

Djangoの`settings.py`で接続を許可するホストを指定するための設定があります。  
デフォルトだと

[code]

    ALLOWED_HOSTS = []
    
[/code]

となっていてDjangoを実行しているマシンからしかアクセスできないので、どこからでもアクセスできるようにするには

[code]

    ALLOWED_HOSTS = [*]
    
[/code]

として下さい。


CC BY-SA 3.0
2016-11-30T08:05:56.997
30791
2016-11-30T08:35:48.020
2020-06-17T08:14:45.997
-1
18862
30755
answer