回答編集履歴
1
AsyncTask を利用するコードを追加
test
CHANGED
@@ -138,3 +138,70 @@
|
|
138
138
|
android:enabled="true"
|
139
139
|
android:exported="true" />
|
140
140
|
```
|
141
|
+
---
|
142
|
+
AsyncTask.doInBackGround からのデータを用いる方法として、AsyncTask を内部クラスにして onPostExecute で外部クラスのメソッドを呼ぶ際のパラメータとすることも可能です。
|
143
|
+
以下は CLOUDS ボタンを押したときは WeatherAsyncTask を起動し、 doInBackground の返り値を startSoundService のパラメータにしています。
|
144
|
+
|
145
|
+
```java
|
146
|
+
import android.content.Intent;
|
147
|
+
import android.os.*;
|
148
|
+
import android.util.Log;
|
149
|
+
import android.widget.Button;
|
150
|
+
|
151
|
+
import androidx.appcompat.app.AppCompatActivity;
|
152
|
+
|
153
|
+
import java.net.*;
|
154
|
+
|
155
|
+
public class MainActivity extends AppCompatActivity {
|
156
|
+
private static final String LOG_TAG = MainActivity.class.getSimpleName();
|
157
|
+
|
158
|
+
@Override
|
159
|
+
protected void onCreate(Bundle savedInstanceState) {
|
160
|
+
super.onCreate(savedInstanceState);
|
161
|
+
setContentView(R.layout.activity_main);
|
162
|
+
|
163
|
+
Button clearButton = findViewById(R.id.clearButton);
|
164
|
+
clearButton.setOnClickListener(v -> {
|
165
|
+
startSoundService("Clear");
|
166
|
+
});
|
167
|
+
|
168
|
+
Button cloudsButton = findViewById(R.id.cloudsButton);
|
169
|
+
cloudsButton.setOnClickListener(v -> {
|
170
|
+
try {
|
171
|
+
new WeatherAsyncTask().execute(new URL("http://~"));
|
172
|
+
} catch(MalformedURLException e) {
|
173
|
+
e.printStackTrace();
|
174
|
+
}
|
175
|
+
});
|
176
|
+
|
177
|
+
Button stopButton = findViewById(R.id.stopButton);
|
178
|
+
stopButton.setOnClickListener(v -> stopService(new Intent(this, SoundService.class)));
|
179
|
+
}
|
180
|
+
|
181
|
+
private void startSoundService(String result) {
|
182
|
+
Intent intent = new Intent(this, SoundService.class);
|
183
|
+
intent.putExtra(SoundService.EXTRA_RESULT, result);
|
184
|
+
startService(intent);
|
185
|
+
}
|
186
|
+
|
187
|
+
class WeatherAsyncTask extends AsyncTask<URL, Void, String> {
|
188
|
+
private final String LOG_TAG = WeatherAsyncTask.class.getSimpleName();
|
189
|
+
|
190
|
+
@Override
|
191
|
+
protected String doInBackground(URL... urls) {
|
192
|
+
Log.d(LOG_TAG, "doInBackground("+urls[0]+")");
|
193
|
+
|
194
|
+
// URL にアクセスしてなんやかんや処理して resault が得た風
|
195
|
+
String result = "Clouds";
|
196
|
+
|
197
|
+
return result;
|
198
|
+
}
|
199
|
+
|
200
|
+
@Override
|
201
|
+
protected void onPostExecute(String result) {
|
202
|
+
Log.d(LOG_TAG, "onPostExecute("+result+")");
|
203
|
+
startSoundService(result);
|
204
|
+
}
|
205
|
+
}
|
206
|
+
}
|
207
|
+
```
|