teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

5

参照URLの追記

2018/10/12 01:17

投稿

beginer_dev
beginer_dev

スコア16

title CHANGED
@@ -1,1 +1,1 @@
1
- okhttp3とPOJOでのAPI利用について
1
+ okhttp3とjsonschema2pojoでのAPI利用について
body CHANGED
@@ -1,6 +1,6 @@
1
1
  Android 開発初心者です。
2
2
  Weather Hacks APIの利用を考えております。AndroidでWeb APIを利用する場合なのですが、
3
- okhttp3で非同期でJSONを取得?までは出来ているのですが、そのデータをPojoに投げて値を取り出す手法がわかりません。
3
+ okhttp3で非同期でJSONを取得?までは出来ているのですが、そのデータをjsonschema2pojoに投げて値を取り出す手法がわかりません。
4
4
 
5
5
  APIは以下を
6
6
  [1] http://weather.livedoor.com/forecast/webservice/json/v1?city=400040
@@ -9,6 +9,9 @@
9
9
  [2] http://blog.shogonir.jp/entry/2016/06/04/172523
10
10
  を参考にして作成しております。
11
11
 
12
+ [3] http://www.jsonschema2pojo.org/
13
+ を用いています。
14
+
12
15
  [2]でのコードのonResponseReceivedでPojoに投げる?書き方がわかりません
13
16
 
14
17
  ```Java

4

質問内容の変更

2018/10/12 01:17

投稿

beginer_dev
beginer_dev

スコア16

title CHANGED
@@ -1,1 +1,1 @@
1
- AndroidAPIの利用について
1
+ okhttp3とPOJOでのAPI利用について
body CHANGED
@@ -1,84 +1,33 @@
1
1
  Android 開発初心者です。
2
- ネットワークの変化ごとにマナーモードにしたりWeather Hacks APIを利用したいですが、どのようにAPIを読み出したら良いのでしょうか?okhttp3を利用しようと考えております。
2
+ Weather Hacks APIの利用考えております。AndroidでWeb APIを利用する場合なのですが、
3
+ okhttp3で非同期でJSONを取得?までは出来ているのですが、そのデータをPojoに投げて値を取り出す手法がわかりません。
3
4
 
4
- MainActivity.java
5
- ```java
5
+ APIは以下を
6
- package com.sample.test;
6
+ [1] http://weather.livedoor.com/forecast/webservice/json/v1?city=400040
7
7
 
8
- import 省略
8
+ okhttp3を用いたデータ取得は
9
+ [2] http://blog.shogonir.jp/entry/2016/06/04/172523
10
+ を参考にして作成しております。
9
11
 
10
- public class MainActivity extends AppCompatActivity {
12
+ [2]でのコードのonResponseReceivedでPojoに投げる?書き方がわかりません
11
13
 
12
- private static final String TAG = "$MainActivity";
14
+ ```Java
13
- private boolean connected = false;
15
+ public class BookmarkApiCaller extends ApiCaller {
14
- private BroadcastReceiver connectivityActionReceiver;
15
- private String ssidStr;
16
16
 
17
+ private TextView mTextView;
17
18
 
18
- @Override
19
- protected void onCreate(Bundle savedInstanceState) {
19
+ public BookmarkApiCaller (TextView textView) {
20
- super.onCreate(savedInstanceState);
20
+ mTextView = textView;
21
- setContentView(R.layout.activity_main);
21
+ }
22
22
 
23
- // BroadcastReceiverを登録
24
- connectivityActionReceiver = new BroadcastReceiver() {
25
- @Override
26
- public void onReceive(Context context, Intent intent) {
23
+ public void fetchBookmarks () {
27
- // ネットワーク接続状態を取得する
28
- ConnectivityManager cm = (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);
29
- NetworkInfo ni = cm.getActiveNetworkInfo();
30
- boolean connected = (ni != null) && ni.isConnected();
31
- // ハンドラをコールする
32
- onConnectedChanged(connected,ni);
33
- }
34
- };
35
- registerReceiver(connectivityActionReceiver, new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION));
36
-
37
- /*
38
- * ネットワーク接続状態が変わった時にコールされるハンドラ
39
- */
40
- private void onConnectedChanged(boolean connected,NetworkInfo ni) {
41
-
42
- if (connected) {
43
- if (ni != null && ni.getType() == ConnectivityManager.TYPE_WIFI) {
44
- checkSSID();
45
- Log.i(TAG, "Network state has changed to Wi-Fi");
46
- } else if (ni != null) {
47
- //-------------------------------------------------------------------------------------------------------------//
48
- //ここでWeather Hacks APIを用いて雨なら通知を出したい。
49
- //http://weather.livedoor.com/forecast/webservice/json/v1?city=130010
24
+ String url = "http://b.hatena.ne.jp/shogonir/rss?of=0";
50
-
51
- //ここでマナーモードにしたい
52
- changeMannerMode();
25
+ callApi(url);
53
- //-------------------------------------------------------------------------------------------------------------//
54
-
55
- Log.i(TAG, "Network state has changed to MOBILE");
56
- } else {
57
- Log.i(TAG, "Network state has changed to MOBILE");
58
- }
59
- }
60
26
  }
61
27
 
62
- /*
28
+ @Override
63
- * 接続済であればtrueを返す
29
+ public void onResponseReceived(String responseBody) {
64
- */
65
- private boolean isConnected() {
30
+ mTextView.setText(responseBody);
66
- return connected;
67
31
  }
68
- public void checkSSID(){
69
- WifiManager manager = (WifiManager)getApplicationContext().getSystemService(WIFI_SERVICE);
70
- WifiInfo info = manager.getConnectionInfo();
71
- String[] apInfo = new String[4];
72
- // SSIDを取得
73
- apInfo[0] = String.format("SSID : %s", info.getSSID());
74
- ssidStr = info.getSSID();
75
- if(ssidStr=="HOME_Wi-Fi")
76
- {
77
- //マナーモードを解除しノーマルモードにしたい
78
- }
79
- }
80
- public void changeMannerMode(){
81
- //ここでマナーモードにしたい
82
- }
83
32
  }
84
33
  ```

3

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

2018/10/12 00:49

投稿

beginer_dev
beginer_dev

スコア16

title CHANGED
@@ -1,1 +1,1 @@
1
- AndroidでWeb APIの利用について
1
+ AndroidでAPIの利用について
body CHANGED
@@ -1,8 +1,6 @@
1
1
  Android 開発初心者です。
2
- ネットワークの変化ごとにマナーモードにしたりweb apiを利用したいのですが、クラスを超えて読み出して値を戻すためにはどのように実装したら良いのかわかりません
2
+ ネットワークの変化ごとにマナーモードにしたりWeather Hacks APIを利用したいのですが、どのようにAPIを読み出したら良いのでしょう?okhttp3を利用しようと考えておりま
3
3
 
4
- APIとマナーモードを使う所を別クラスにした場合どのように読み出し処理を行えば良いのでしょうか?
5
-
6
4
  MainActivity.java
7
5
  ```java
8
6
  package com.sample.test;
@@ -12,94 +10,75 @@
12
10
  public class MainActivity extends AppCompatActivity {
13
11
 
14
12
  private static final String TAG = "$MainActivity";
13
+ private boolean connected = false;
14
+ private BroadcastReceiver connectivityActionReceiver;
15
+ private String ssidStr;
15
16
 
17
+
16
18
  @Override
17
19
  protected void onCreate(Bundle savedInstanceState) {
18
20
  super.onCreate(savedInstanceState);
19
21
  setContentView(R.layout.activity_main);
20
22
 
23
+ // BroadcastReceiverを登録
24
+ connectivityActionReceiver = new BroadcastReceiver() {
25
+ @Override
26
+ public void onReceive(Context context, Intent intent) {
21
- //ネットワークの変化通知
27
+ // ネットワーク接続状態取得する
22
- BroadcastReceiver receiverNetworkChanged = new NetworkChangedReceiver();
23
- IntentFilter filter = new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION);
28
+ ConnectivityManager cm = (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);
24
- registerReceiver(receiverNetworkChanged, filter);
29
+ NetworkInfo ni = cm.getActiveNetworkInfo();
30
+ boolean connected = (ni != null) && ni.isConnected();
31
+ // ハンドラをコールする
32
+ onConnectedChanged(connected,ni);
25
- }
33
+ }
34
+ };
35
+ registerReceiver(connectivityActionReceiver, new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION));
26
36
 
27
- @Override
37
+ /*
28
- protected void onResume() {
38
+ * ネットワーク接続状態が変わった時にコールされるハンドラ
29
- super.onResume();
39
+ */
30
- }
40
+ private void onConnectedChanged(boolean connected,NetworkInfo ni) {
31
41
 
42
+ if (connected) {
43
+ if (ni != null && ni.getType() == ConnectivityManager.TYPE_WIFI) {
44
+ checkSSID();
45
+ Log.i(TAG, "Network state has changed to Wi-Fi");
32
- public void onClickSendEnd()
46
+ } else if (ni != null) {
33
- {
47
+ //-------------------------------------------------------------------------------------------------------------//
34
- Intent intent = new Intent(MainActivity.TAG);
48
+ //ここでWeather Hacks APIを用いて雨なら通知を出したい。
49
+ //http://weather.livedoor.com/forecast/webservice/json/v1?city=130010
50
+
51
+ //ここでマナーモードにしたい
35
- stopService(intent);
52
+ changeMannerMode();
53
+ //-------------------------------------------------------------------------------------------------------------//
54
+
55
+ Log.i(TAG, "Network state has changed to MOBILE");
36
- finish();
56
+ } else {
57
+ Log.i(TAG, "Network state has changed to MOBILE");
58
+ }
59
+ }
37
60
  }
38
61
 
39
- }
40
- ```
41
-
42
- NetworkChangedReciever.java
43
- ```java
62
+ /*
63
+ * 接続済であればtrueを返す
64
+ */
44
- package com.sample.test;
65
+ private boolean isConnected() {
45
-
46
- import 省略
47
-
48
- public class NetworkChangedReceiver extends BroadcastReceiver {
49
-
50
- private static final String TAG = "$NetworkChangedReceiver";
51
-
52
- public interface OnNetworkStateChangedListener {
53
- void changedToWifi();
66
+ return connected;
54
- void changedToMobile();
55
- void changedToOffline();
56
67
  }
57
-
58
- @Override
59
- public void onReceive(Context context, Intent intent) {
68
+ public void checkSSID(){
60
- ConnectivityManager conn = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
61
-
62
- NetworkInfo networkInfo = conn.getActiveNetworkInfo();
63
- if (networkInfo != null && networkInfo.getType() == ConnectivityManager.TYPE_WIFI) {
64
- Toast toast = Toast.makeText(context, "Using Wi-Fi", Toast.LENGTH_LONG);
65
- toast.getView().setBackgroundColor(Color.BLUE);
66
- toast.show();
67
- Log.i(TAG, "Network state has changed to Wi-Fi");
68
-
69
- //-------------------------------------------------------------------------------------------------------------//
70
- //ここでSSID取得して普段使っているSSIDであれば
71
- //マナーモードーを解除したい
72
-
73
- //このクラスでgetSystemServiceを読み出せない。
74
- //WifiManager manager = (WifiManager)getSystemService(WIFI_SERVICE);
69
+ WifiManager manager = (WifiManager)getApplicationContext().getSystemService(WIFI_SERVICE);
75
- //WifiInfo info = manager.getConnectionInfo();
70
+ WifiInfo info = manager.getConnectionInfo();
76
- //String[] apInfo = new String[4];
71
+ String[] apInfo = new String[4];
77
- // SSIDを取得
72
+ // SSIDを取得
78
- //apInfo[0] = String.format("SSID : %s", info.getSSID());
73
+ apInfo[0] = String.format("SSID : %s", info.getSSID());
79
- //-------------------------------------------------------------------------------------------------------------//
80
-
81
- } else if (networkInfo != null) {
74
+ ssidStr = info.getSSID();
82
- Toast toast = Toast.makeText(context, "Using MOBILE", Toast.LENGTH_LONG);
83
- toast.getView().setBackgroundColor(Color.BLUE);
75
+ if(ssidStr=="HOME_Wi-Fi")
84
- toast.show();
85
-
86
- //-------------------------------------------------------------------------------------------------------------//
87
- //ここでマナーモードーに設定したいがgetSystemServiceがこのクラス上では使えない
88
- /*
76
+ {
89
- // AudioManager取得
90
- AudioManager am = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
91
- // サイレントモードに設定
77
+ //マナーモードを解除しノーマルモードしたい
92
- am.setRingerMode(AudioManager.RINGER_MODE_VIBRATE);
93
- */
94
- //ついでにlivedoorのweather APIで外出前?外出して宅内Wi-Fiから切断されたら天気予報を知りたい
95
- //晴れ以外なら通知も出したい
96
- //http://weather.livedoor.com/forecast/webservice/json/v1?city=130010
97
- //タイミング的にはここでWEB APIを読みたいがこのClassでは不可?他のクラスにwebapiを使うところとJSONの処理を書く?
98
- //-------------------------------------------------------------------------------------------------------------//
99
- Log.i(TAG, "Network state has changed to MOBILE");
100
- } else {
101
- Log.i(TAG, "Network state has changed to OFFLINE");
102
78
  }
103
79
  }
80
+ public void changeMannerMode(){
81
+ //ここでマナーモードにしたい
82
+ }
104
83
  }
105
84
  ```

2

質問タイトルの変更

2018/10/11 08:30

投稿

beginer_dev
beginer_dev

スコア16

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

1

コメントの訂正

2018/10/11 00:52

投稿

beginer_dev
beginer_dev

スコア16

title CHANGED
File without changes
body CHANGED
@@ -18,7 +18,7 @@
18
18
  super.onCreate(savedInstanceState);
19
19
  setContentView(R.layout.activity_main);
20
20
 
21
- //Wi-Fiに接続されたら通知
21
+ //ネットワークの変化を通知
22
22
  BroadcastReceiver receiverNetworkChanged = new NetworkChangedReceiver();
23
23
  IntentFilter filter = new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION);
24
24
  registerReceiver(receiverNetworkChanged, filter);