日の終わりに今日のまとめ

開発や仕事で使った技術をまとめてます。

[android]非同期でHTTP通信を行う

androidのアプリでメインスレッド内でHTTP通信を実行しようとすると「NetworkOnMainThreadException」という例外が起きてしまう

これはandroid4以上からの仕様でメインスレッド内ではHTTP通信を許可していないため、HTTP通信を行いたい場合、非同期処理の中で行うことになる

 

AndroidManifest.xmlに以下を追加しておく

1
<uses-permission android:name="android.permission.INTERNET"/>

 

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){
// ここで非同期処理の結果を扱う
}
}
}