質問編集履歴

2

質問の内容を大幅に変更いたしました。

2020/04/01 09:21

投稿

s_nakagawa
s_nakagawa

スコア7

test CHANGED
@@ -1 +1 @@
1
- okhttp 動的なポート番号取得したい
1
+ okhttp Wifi挟んでのhttp送信
test CHANGED
@@ -2,19 +2,15 @@
2
2
 
3
3
  現在、私はWeb APIにてJsonStringを取得するクラスを作成しています。
4
4
 
5
- ですが、ソケットアドレス宣言するエラーを吐きます。
5
+ ですが、response変数生成する以下のエラーを吐きます。
6
6
 
7
7
  ```kotlin
8
8
 
9
- val URL = "http://〇〇:××/api"
9
+ // この時点でNETの権限は確認済み
10
-
11
- val clientBuilder = OkHttpClient.Builder()
12
-
13
- val soket = InetSocketAddress("〇〇", ××)
14
10
 
15
11
 
16
12
 
17
- clientBuilder.proxy(Proxy(Proxy.Type.HTTP, soket ));
13
+ val URL = "http://〇〇:××/api"
18
14
 
19
15
 
20
16
 
@@ -26,7 +22,17 @@
26
22
 
27
23
 
28
24
 
29
- val response = clientBuilder.build().newCall(request).execute()
25
+ val response = IISCertificateOKInstance().newCall(request).execute()
26
+
27
+
28
+
29
+ fun IISCertificateOKInstance():OkHttpClient{
30
+
31
+ // すべてのSSL証明書を許可したクライアントを返している
32
+
33
+ // ソースは省略
34
+
35
+ }
30
36
 
31
37
  ```
32
38
 
@@ -40,84 +46,20 @@
40
46
 
41
47
 
42
48
 
43
- どうやら、△△(port◇◇)はAndroid側で設定されたIPアドレスポート番号らしく、各機体に備わっているののようです
49
+ 最初はAPIのURLかサーバーのIPアドレスポート番号が違っているのかと考えていたのですが、
44
50
 
51
+ 実行環境をエミュレーターから実機に変更し、実機のwifi通信をoffにしてみると上記エラーは返してきませんでした。
52
+
53
+ 調べてみると△△の部分はandroidに接続されているwifiのIPアドレスであることがわかりました。
54
+
45
- これらIPアドレスとポート番号を動的に取るために、私は以下のクラスを作成しています
55
+ ですが、◇◇部分がwifiのポート番号なのかは確かな確証を得ることができませんでし
56
+
57
+ ~~(エラーがなかったからと言ってAPIのresponse情報が返ってきたのかといわれると実際にはアプリがクラッシュしましたが、今回は置いときます)~~
46
58
 
47
59
 
48
60
 
49
- ```kotlin
61
+ かといって、実際にAndroidでアプリケーションを使う際、いちいちwifiを切ったりするのはいかがなものかと考えます。
50
62
 
51
- class connect{
63
+ では、どうすればAndroidがwifi接続されている状態でもAPIは叩けるのか、
52
64
 
53
-
54
-
55
- // ローカルで動的なポートを取得する
56
-
57
- fun getPort():Int{
58
-
59
- // わからないところ
60
-
61
- return -1
62
-
63
- }
64
-
65
-
66
-
67
- // ローカルで動的なIPアドレスを取得する
68
-
69
- fun getIPAddress():String{
70
-
71
- var text = "";
72
-
73
- try{
74
-
75
- val interfaces = NetworkInterface.getNetworkInterfaces();
76
-
77
- if(interfaces == null){
78
-
79
- text = "IPアドレス取得できませんでした。"
80
-
81
- return text
82
-
83
- }
84
-
85
- while(interfaces.hasMoreElements()){
86
-
87
- val network = interfaces.nextElement()
88
-
89
- val addresses = network.inetAddresses
90
-
91
-
92
-
93
- while(addresses.hasMoreElements()){
94
-
95
- val address = addresses.nextElement()
96
-
97
- text = address.hostAddress
98
-
99
- Log.d("接続アドレス",address.hostAddress)
100
-
101
- }
102
-
103
- }
104
-
105
- }catch (e : SocketException){
106
-
107
- e.printStackTrace()
108
-
109
- }
110
-
111
- return text
112
-
113
- }
114
-
115
- }
116
-
117
- ```
118
-
119
-
120
-
121
- しかしながら、動的なポート番号を取得する方法が見つからず、動的なポートという存在すら怪しくなっています。
122
-
123
- ですで、動的なポート番号の取得方法、または他の解決方法を教えてください
65
+ の方法、および上記の解決方法を教えてください

1

requestとresponseのソースを書いていないので、API本体がわからないというご指摘がありましたため、追加いたしました

2020/04/01 09:21

投稿

s_nakagawa
s_nakagawa

スコア7

test CHANGED
File without changes
test CHANGED
@@ -15,6 +15,18 @@
15
15
 
16
16
 
17
17
  clientBuilder.proxy(Proxy(Proxy.Type.HTTP, soket ));
18
+
19
+
20
+
21
+ val request = Request.Builder()
22
+
23
+ .url(URL)
24
+
25
+ .build()
26
+
27
+
28
+
29
+ val response = clientBuilder.build().newCall(request).execute()
18
30
 
19
31
  ```
20
32