[android]非同期でHTTP通信を行う
androidのアプリでメインスレッド内でHTTP通信を実行しようとすると「NetworkOnMainThreadException」という例外が起きてしまう
これはandroid4以上からの仕様でメインスレッド内ではHTTP通信を許可していないため、HTTP通信を行いたい場合、非同期処理の中で行うことになる
AndroidManifest.xmlに以下を追加しておく
1
|
java側は以下のようにして非同期処理が実行できる
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
public class HelloAndroid extends Activity {
/** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); setContentView(R.layout.main); Button btn = (Button)findViewById(R.id.button1); btn.setOnClickListener(new OnClickListener() { public void onClick(View v) { ExecAsyncTask post = new ExecAsyncTask(); post.execute(); } }); } private class ExecAsyncTask extends AsyncTask<String, Integer, Integer> { @Override protected Integer doInBackground(String... contents) { // ここに別スレッドで実行される非同期処理 // HTTP通信処理など } @Override
protected void onPostExecute(Void result){ // ここで非同期処理の結果を扱う } } }
|