質問編集履歴

5

参照URLの追記

2018/10/12 01:17

投稿

beginer_dev
beginer_dev

スコア16

test CHANGED
@@ -1 +1 @@
1
- okhttp3とPOJOでのAPI利用について
1
+ okhttp3とjsonschema2pojoでのAPI利用について
test CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  Weather Hacks APIの利用を考えております。AndroidでWeb APIを利用する場合なのですが、
4
4
 
5
- okhttp3で非同期でJSONを取得?までは出来ているのですが、そのデータをPojoに投げて値を取り出す手法がわかりません。
5
+ okhttp3で非同期でJSONを取得?までは出来ているのですが、そのデータをjsonschema2pojoに投げて値を取り出す手法がわかりません。
6
6
 
7
7
 
8
8
 
@@ -17,6 +17,12 @@
17
17
  [2] http://blog.shogonir.jp/entry/2016/06/04/172523
18
18
 
19
19
  を参考にして作成しております。
20
+
21
+
22
+
23
+ [3] http://www.jsonschema2pojo.org/
24
+
25
+ を用いています。
20
26
 
21
27
 
22
28
 

4

質問内容の変更

2018/10/12 01:17

投稿

beginer_dev
beginer_dev

スコア16

test CHANGED
@@ -1 +1 @@
1
- AndroidでAPI利用について
1
+ okhttp3とPOJOAPI利用について
test CHANGED
@@ -1,166 +1,64 @@
1
1
  Android 開発初心者です。
2
2
 
3
- ネットワークの変化ごとにマナーモードにしたりWeather Hacks API利用したいのですが、どのようにAPI読み出したら良いのでしょうか?okhttp3を利用しようと考えております。
3
+ Weather Hacks API利用を考えております。AndroidでWeb APIを利用する場合なのですが、
4
+
5
+ okhttp3で非同期でJSONを取得?までは出来ているのですが、そのデータをPojoに投げて値を取り出す手法がわかりません。
4
6
 
5
7
 
6
8
 
7
- MainActivity.java
9
+ APIは以下を
8
10
 
9
- ```java
10
-
11
- package com.sample.test;
11
+ [1] http://weather.livedoor.com/forecast/webservice/json/v1?city=400040
12
12
 
13
13
 
14
14
 
15
- import 省略
15
+ okhttp3を用いたデータ取得は
16
+
17
+ [2] http://blog.shogonir.jp/entry/2016/06/04/172523
18
+
19
+ を参考にして作成しております。
16
20
 
17
21
 
18
22
 
19
- public class MainActivity extends AppCompatActivity {
23
+ [2]でのコードのonResponseReceivedでPojoに投げる?書き方がわかりません
20
24
 
21
25
 
22
26
 
23
- private static final String TAG = "$MainActivity";
27
+ ```Java
24
28
 
25
- private boolean connected = false;
29
+ public class BookmarkApiCaller extends ApiCaller {
26
-
27
- private BroadcastReceiver connectivityActionReceiver;
28
-
29
- private String ssidStr;
30
30
 
31
31
 
32
+
33
+ private TextView mTextView;
34
+
35
+
36
+
37
+ public BookmarkApiCaller (TextView textView) {
38
+
39
+ mTextView = textView;
40
+
41
+ }
42
+
43
+
44
+
45
+ public void fetchBookmarks () {
46
+
47
+ String url = "http://b.hatena.ne.jp/shogonir/rss?of=0";
48
+
49
+ callApi(url);
50
+
51
+ }
32
52
 
33
53
 
34
54
 
35
55
  @Override
36
56
 
37
- protected void onCreate(Bundle savedInstanceState) {
57
+ public void onResponseReceived(String responseBody) {
38
58
 
39
- super.onCreate(savedInstanceState);
40
-
41
- setContentView(R.layout.activity_main);
42
-
43
-
44
-
45
- // BroadcastReceiverを登録
46
-
47
- connectivityActionReceiver = new BroadcastReceiver() {
48
-
49
- @Override
50
-
51
- public void onReceive(Context context, Intent intent) {
52
-
53
- // ネットワーク接続状態を取得する
54
-
55
- ConnectivityManager cm = (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);
56
-
57
- NetworkInfo ni = cm.getActiveNetworkInfo();
58
-
59
- boolean connected = (ni != null) && ni.isConnected();
60
-
61
- // ハンドラをコールする
62
-
63
- onConnectedChanged(connected,ni);
59
+ mTextView.setText(responseBody);
64
-
65
- }
66
-
67
- };
68
-
69
- registerReceiver(connectivityActionReceiver, new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION));
70
-
71
-
72
-
73
- /*
74
-
75
- * ネットワーク接続状態が変わった時にコールされるハンドラ
76
-
77
- */
78
-
79
- private void onConnectedChanged(boolean connected,NetworkInfo ni) {
80
-
81
-
82
-
83
- if (connected) {
84
-
85
- if (ni != null && ni.getType() == ConnectivityManager.TYPE_WIFI) {
86
-
87
- checkSSID();
88
-
89
- Log.i(TAG, "Network state has changed to Wi-Fi");
90
-
91
- } else if (ni != null) {
92
-
93
- //-------------------------------------------------------------------------------------------------------------//
94
-
95
- //ここでWeather Hacks APIを用いて雨なら通知を出したい。
96
-
97
- //http://weather.livedoor.com/forecast/webservice/json/v1?city=130010
98
-
99
-
100
-
101
- //ここでマナーモードにしたい
102
-
103
- changeMannerMode();
104
-
105
- //-------------------------------------------------------------------------------------------------------------//
106
-
107
-
108
-
109
- Log.i(TAG, "Network state has changed to MOBILE");
110
-
111
- } else {
112
-
113
- Log.i(TAG, "Network state has changed to MOBILE");
114
-
115
- }
116
-
117
- }
118
60
 
119
61
  }
120
-
121
-
122
-
123
- /*
124
-
125
- * 接続済であればtrueを返す
126
-
127
- */
128
-
129
- private boolean isConnected() {
130
-
131
- return connected;
132
-
133
- }
134
-
135
- public void checkSSID(){
136
-
137
- WifiManager manager = (WifiManager)getApplicationContext().getSystemService(WIFI_SERVICE);
138
-
139
- WifiInfo info = manager.getConnectionInfo();
140
-
141
- String[] apInfo = new String[4];
142
-
143
- // SSIDを取得
144
-
145
- apInfo[0] = String.format("SSID : %s", info.getSSID());
146
-
147
- ssidStr = info.getSSID();
148
-
149
- if(ssidStr=="HOME_Wi-Fi")
150
-
151
- {
152
-
153
- //マナーモードを解除しノーマルモードにしたい
154
-
155
- }
156
-
157
- }
158
-
159
- public void changeMannerMode(){
160
-
161
- //ここでマナーモードにしたい
162
-
163
- }
164
62
 
165
63
  }
166
64
 

3

複数に分けていたクラスを1つにまとめました。

2018/10/12 00:49

投稿

beginer_dev
beginer_dev

スコア16

test CHANGED
@@ -1 +1 @@
1
- AndroidでWeb APIの利用について
1
+ AndroidでAPIの利用について
test CHANGED
@@ -1,10 +1,6 @@
1
1
  Android 開発初心者です。
2
2
 
3
- ネットワークの変化ごとにマナーモードにしたりweb apiを利用したいのですが、クラスを超えて読み出して値を戻すためにはどのように実装したら良いのかわかりません
3
+ ネットワークの変化ごとにマナーモードにしたりWeather Hacks APIを利用したいのですが、どのようにAPIを読み出したら良いのでしょう?okhttp3を利用しようと考えておりま
4
-
5
-
6
-
7
- APIとマナーモードを使う所を別クラスにした場合どのように読み出し処理を行えば良いのでしょうか?
8
4
 
9
5
 
10
6
 
@@ -26,6 +22,14 @@
26
22
 
27
23
  private static final String TAG = "$MainActivity";
28
24
 
25
+ private boolean connected = false;
26
+
27
+ private BroadcastReceiver connectivityActionReceiver;
28
+
29
+ private String ssidStr;
30
+
31
+
32
+
29
33
 
30
34
 
31
35
  @Override
@@ -38,172 +42,126 @@
38
42
 
39
43
 
40
44
 
41
- //ネットワークの変化通知
45
+ // BroadcastReceiver登録
42
46
 
43
- BroadcastReceiver receiverNetworkChanged = new NetworkChangedReceiver();
47
+ connectivityActionReceiver = new BroadcastReceiver() {
44
48
 
45
- IntentFilter filter = new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION);
49
+ @Override
46
50
 
47
- registerReceiver(receiverNetworkChanged, filter);
51
+ public void onReceive(Context context, Intent intent) {
52
+
53
+ // ネットワーク接続状態を取得する
54
+
55
+ ConnectivityManager cm = (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);
56
+
57
+ NetworkInfo ni = cm.getActiveNetworkInfo();
58
+
59
+ boolean connected = (ni != null) && ni.isConnected();
60
+
61
+ // ハンドラをコールする
62
+
63
+ onConnectedChanged(connected,ni);
64
+
65
+ }
66
+
67
+ };
68
+
69
+ registerReceiver(connectivityActionReceiver, new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION));
70
+
71
+
72
+
73
+ /*
74
+
75
+ * ネットワーク接続状態が変わった時にコールされるハンドラ
76
+
77
+ */
78
+
79
+ private void onConnectedChanged(boolean connected,NetworkInfo ni) {
80
+
81
+
82
+
83
+ if (connected) {
84
+
85
+ if (ni != null && ni.getType() == ConnectivityManager.TYPE_WIFI) {
86
+
87
+ checkSSID();
88
+
89
+ Log.i(TAG, "Network state has changed to Wi-Fi");
90
+
91
+ } else if (ni != null) {
92
+
93
+ //-------------------------------------------------------------------------------------------------------------//
94
+
95
+ //ここでWeather Hacks APIを用いて雨なら通知を出したい。
96
+
97
+ //http://weather.livedoor.com/forecast/webservice/json/v1?city=130010
98
+
99
+
100
+
101
+ //ここでマナーモードにしたい
102
+
103
+ changeMannerMode();
104
+
105
+ //-------------------------------------------------------------------------------------------------------------//
106
+
107
+
108
+
109
+ Log.i(TAG, "Network state has changed to MOBILE");
110
+
111
+ } else {
112
+
113
+ Log.i(TAG, "Network state has changed to MOBILE");
114
+
115
+ }
116
+
117
+ }
48
118
 
49
119
  }
50
120
 
51
121
 
52
122
 
53
- @Override
123
+ /*
54
124
 
55
- protected void onResume() {
125
+ * 接続済であればtrueを返す
56
126
 
127
+ */
128
+
129
+ private boolean isConnected() {
130
+
57
- super.onResume();
131
+ return connected;
58
132
 
59
133
  }
60
134
 
135
+ public void checkSSID(){
61
136
 
137
+ WifiManager manager = (WifiManager)getApplicationContext().getSystemService(WIFI_SERVICE);
62
138
 
63
- public void onClickSendEnd()
139
+ WifiInfo info = manager.getConnectionInfo();
64
140
 
65
- {
141
+ String[] apInfo = new String[4];
66
142
 
67
- Intent intent = new Intent(MainActivity.TAG);
143
+ // SSIDを取得
68
144
 
69
- stopService(intent);
145
+ apInfo[0] = String.format("SSID : %s", info.getSSID());
70
146
 
71
- finish();
147
+ ssidStr = info.getSSID();
72
148
 
73
- }
149
+ if(ssidStr=="HOME_Wi-Fi")
74
150
 
151
+ {
75
152
 
76
-
77
- }
78
-
79
- ```
80
-
81
-
82
-
83
- NetworkChangedReciever.java
84
-
85
- ```java
86
-
87
- package com.sample.test;
88
-
89
-
90
-
91
- import 省略
92
-
93
-
94
-
95
- public class NetworkChangedReceiver extends BroadcastReceiver {
96
-
97
-
98
-
99
- private static final String TAG = "$NetworkChangedReceiver";
100
-
101
-
102
-
103
- public interface OnNetworkStateChangedListener {
104
-
105
- void changedToWifi();
106
-
107
- void changedToMobile();
108
-
109
- void changedToOffline();
110
-
111
- }
112
-
113
-
114
-
115
- @Override
116
-
117
- public void onReceive(Context context, Intent intent) {
118
-
119
- ConnectivityManager conn = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
120
-
121
-
122
-
123
- NetworkInfo networkInfo = conn.getActiveNetworkInfo();
124
-
125
- if (networkInfo != null && networkInfo.getType() == ConnectivityManager.TYPE_WIFI) {
126
-
127
- Toast toast = Toast.makeText(context, "Using Wi-Fi", Toast.LENGTH_LONG);
128
-
129
- toast.getView().setBackgroundColor(Color.BLUE);
130
-
131
- toast.show();
132
-
133
- Log.i(TAG, "Network state has changed to Wi-Fi");
134
-
135
-
136
-
137
- //-------------------------------------------------------------------------------------------------------------//
138
-
139
- //ここでSSID取得して普段使っているSSIDであれば
140
-
141
- //マナーモードを解除したい
153
+ //マナーモードを解除しノーマルモードにしたい
142
-
143
-
144
-
145
- //このクラスでgetSystemServiceを読み出せない。
146
-
147
- //WifiManager manager = (WifiManager)getSystemService(WIFI_SERVICE);
148
-
149
- //WifiInfo info = manager.getConnectionInfo();
150
-
151
- //String[] apInfo = new String[4];
152
-
153
- // SSIDを取得
154
-
155
- //apInfo[0] = String.format("SSID : %s", info.getSSID());
156
-
157
- //-------------------------------------------------------------------------------------------------------------//
158
-
159
-
160
-
161
- } else if (networkInfo != null) {
162
-
163
- Toast toast = Toast.makeText(context, "Using MOBILE", Toast.LENGTH_LONG);
164
-
165
- toast.getView().setBackgroundColor(Color.BLUE);
166
-
167
- toast.show();
168
-
169
-
170
-
171
- //-------------------------------------------------------------------------------------------------------------//
172
-
173
- //ここでマナーモードーに設定したいがgetSystemServiceがこのクラス上では使えない
174
-
175
- /*
176
-
177
- // AudioManager取得
178
-
179
- AudioManager am = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
180
-
181
- // サイレントモードに設定
182
-
183
- am.setRingerMode(AudioManager.RINGER_MODE_VIBRATE);
184
-
185
- */
186
-
187
- //ついでにlivedoorのweather APIで外出前?外出して宅内Wi-Fiから切断されたら天気予報を知りたい
188
-
189
- //晴れ以外なら通知も出したい
190
-
191
- //http://weather.livedoor.com/forecast/webservice/json/v1?city=130010
192
-
193
- //タイミング的にはここでWEB APIを読みたいがこのClassでは不可?他のクラスにwebapiを使うところとJSONの処理を書く?
194
-
195
- //-------------------------------------------------------------------------------------------------------------//
196
-
197
- Log.i(TAG, "Network state has changed to MOBILE");
198
-
199
- } else {
200
-
201
- Log.i(TAG, "Network state has changed to OFFLINE");
202
154
 
203
155
  }
204
156
 
205
157
  }
206
158
 
159
+ public void changeMannerMode(){
160
+
161
+ //ここでマナーモードにしたい
162
+
163
+ }
164
+
207
165
  }
208
166
 
209
167
  ```

2

質問タイトルの変更

2018/10/11 08:30

投稿

beginer_dev
beginer_dev

スコア16

test CHANGED
@@ -1 +1 @@
1
- AndroidでWeb APIの利用についてとクラス読み出しについて
1
+ AndroidでWeb APIの利用について
test CHANGED
File without changes

1

コメントの訂正

2018/10/11 00:52

投稿

beginer_dev
beginer_dev

スコア16

test CHANGED
File without changes
test CHANGED
@@ -38,7 +38,7 @@
38
38
 
39
39
 
40
40
 
41
- //Wi-Fiに接続されたら通知
41
+ //ネットワークの変化を通知
42
42
 
43
43
  BroadcastReceiver receiverNetworkChanged = new NetworkChangedReceiver();
44
44